沉重的静态内容服务有多less内存?

我想为我的静态内容制作一个服务器。
我需要提供3-10 MB的文件 – 很多。 (我也会把这个服务器的一些.js和.css以及来自我的网站的图片)。
我想到了nginx和G-WAN( http://trustleap.com/ )。
我不知道服务静态内容需要哪些资源? 每个文件传输使用多less内存
如果我将使用一个256 MB(或512 MB)的VPS,它具有良好的端口和巨大的带宽,我可以提供多less点击/秒(3-10 MB文件)? (我知道“这取决于” – 但请给我一个基于经验或理论的粗略估计)。
有没有很多的文件,只是经常下载 – 我应该考虑caching,或这只会使用我的记忆需要服务点击?

如果您使用的是nginx,那么您每个活动连接的开销只有几KB。 如果您使用的是像Apache这样的东西,那么每个连接都会有一个线程,这意味着每个连接数百KB或甚至几MB。

但是,nginx不支持Linux上的asynchronous磁盘 IO(因为Linux上的asynchronous磁盘IO基本上被devise破坏了)。 所以你将不得不运行许多nginx工作进程,因为每次读取磁盘都可能会阻塞整个工作进程。 如果你使用的是FreeBSD,这不是问题,而nginx会使用asynchronous磁盘和networkingIO来创造奇迹。 但是如果你在这个项目中使用Linux,你可能想要坚持使用Apache。

但是,最重要的是磁盘caching,而不是您select的Web服务器。 你需要大量的可用内存,以便操作系统能够caching这些文件,并使读取速度非常快。 如果“热点集”超过8 GB,考虑减less内存和廉价的SSD,因为成本/效益比可能会更好。

最后,考虑使用CDN卸载这个,并得到一个非常便宜的服务器。 提供静态文件是他们所做的,而且他们做得非常快,而且非常便宜。 SimpleCDN的价格最低,但是MaxCDN,Rackspace,Amazon等都是CDN领域低端的大玩家。

如果操作系统可以将内容的热部分caching到内存中,则不会使用该磁盘,并且可以真正快速地处理内容。 在VPS上,每秒可以提供数百个请求,在进入CPU限制之前,很可能会使networking饱和。

如果内容不符合RAM,则磁盘IO(查找,吞吐量,文件系统碎片)将发挥作用并且等式改变。

networking服务器会为每个客户端增加一个内存开销,但是nginx可以在每个连接几千字节的时候这样做。

希望这些指针可以帮助你。

提供静态内容需要哪些资源? 每个文件传输使用多less内存?

首先,对于相同数量的工作人员,G-WAN v4.7 +在启动时使用的内存要比Nginxless得多:

> Server 'nginx' process topology: --------------------------------------------- 6] pid:21228 Process RAM: 0.77 MB 5] pid:21229 Process RAM: 2.44 MB 4] pid:21230 Process RAM: 2.44 MB 3] pid:21231 Process RAM: 2.44 MB 2] pid:21232 Process RAM: 2.44 MB 1] pid:21233 Process RAM: 2.44 MB 0] pid:21234 Process RAM: 2.44 MB --------------------------------------------- Total 'nginx' server footprint: 15.39 MB > Server 'gwan' process topology: --------------------------------------------- 6] pid:6054 Thread 5] pid:6053 Thread 4] pid:6052 Thread 3] pid:6051 Thread 2] pid:6050 Thread 1] pid:6049 Thread 0] pid:5839 Process RAM: 2.19 MB --------------------------------------------- Total 'gwan' server footprint: 2.19 MB 

G-WAN使用线程(通常每个核心一个线程),Nginx使用进程(通常每个核心一个进程),进程拖动更多开销,需要通过共享内存进行同步等。两者都使用事件处理的“asynchronous”模式。

请注意,在这里, G-WAN可以自动增长到100多万个并发连接,而​​Nginx仅限于其worker_connections设置 (在上面的ab.ctesting中仅定义为4096)。

对我而言,不清楚的是每个连接是否有内存开销:也就是说,如果nginx或gwan在每次命中时都消耗内存,

简言之,G-WAN v4.7 +(默认情况下禁止内存中的caching)占用的内存比Nginxless得多,对于所有文件大小,每秒处理更多的请求。

长久以来,虽然Nginx在新的HTTP保存请求中消耗的内存也越来越多,但G-WAN的内存使用量对于HTTP保持请求的请求可以保持稳定,而且与非保持的Nginx相比,要求。

我们的weighttp包装器ab.c在testing期间测量服务器应用程序和系统的内存消耗。 这表明Nginx对内存资源消耗的重视程度较高。

这是由于每个Web服务器处理请求和分配内存的方式。

如果我同时有10个5MB文件的请求,这是否意味着将有50MB的内存用于服务? 也许+内存的线程(我不知道是否nginx或gwan使用线程evey连接)。

两个服务器(Nginx和G-WAN)都使用sendfile()所以内核(而不是应用程序)正在为I / O分配资源。

Web服务器仍然会分配资源,但这是为了维护每个连接的上下文,而不是缓冲磁盘I / O。

因此,消耗的量取决于在每个sendfile()调用中发送的文件块的大小,而不是直接在文件总大小上。

总文件大小对高并发度的长期影响很大,但这是由于内核需要caching的块的数量。

还有更多的问题,请在G-WAN上留言。 我们已经大量投资于类似CDN的应用程序。