我想为我的静态内容制作一个服务器。
我需要提供一些3-10兆的文件-很多。(我还会在这台服务器上放一些.js和.css以及我网站上的图片)。
我想到了nginx和G( http://trustleap.com/ ).
我不知道的是,服务静态内容需要哪些资源?每个文件传输使用多少RAM?
如果我使用一个256 mb (或512 mb)端口和巨大带宽的VPS,我能提供多少个/seconds (3-10mb文件)?(我知道“视情况而定”-但请根据经验或理论给我粗略的估计)。
没有太多的文件,只是经常下载-我应该考虑缓存,或者这将只使用我的内存所需的服务命中?
发布于 2010-09-21 04:06:04
如果您使用的是nginx,那么每个活动连接的开销仅为几KB。如果您使用的是Apache之类的东西,那么每个连接将有一个线程,这意味着每个连接有数百KB甚至是KB。
但是,nginx不支持Linux上的异步磁盘IO (因为设计破坏了Linux上的异步磁盘IO )。因此,您必须运行许多nginx辅助进程,因为每次读取磁盘都可能阻塞整个工作进程。如果您正在使用FreeBSD,这不是一个问题,并且nginx将在异步磁盘和网络IO中产生奇迹。但是,如果您在这个项目中使用Linux,您可能想继续使用Apache。
但实际上,最重要的是磁盘缓存,而不是您选择的web服务器。您需要大量的空闲RAM,以便操作系统能够缓存这些文件并使读取速度非常快。如果“热集”大于8GB,考虑获得更少的RAM和廉价的SSD,因为成本/效益比可能会更好。
最后,考虑使用CDN来卸载它,并获得一个非常便宜的服务器。服务静态文件是他们所做的事,而且他们做的非常快而且非常便宜。SimpleCDN的价格最低,但MaxCDN、Rackspace、亚马逊等都是CDN低端的大公司。
发布于 2010-09-17 11:31:48
如果操作系统能够将内容的热点部分缓存到ram中,那么它就不会使用磁盘,并且会非常快地提供服务。在VPS上每秒应该有数百个请求,在进入CPU限制之前,您很可能会使网络饱和。
如果内容不适合ram,那么磁盘IO (查找、吞吐量、文件系统碎片)就会发挥作用,而等式也会发生变化。
few服务器将为每个客户端增加一个内存开销,但nginx可以在每个连接几千字节内完成这一任务。
希望这些建议能帮到你。
发布于 2013-11-23 09:18:20
服务静态内容需要哪些资源?每个文件传输使用多少RAM?
首先,对于相同数量的工作人员,G v4.7+在启动时使用的内存比Nginx少得多:
> 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 MBG使用线程(每个内核通常使用一个线程),Nginx使用进程(每个内核通常使用一个进程),而进程拖放更多开销,需要通过共享内存进行同步,等等。两者都使用“异步”事件处理模型。
请注意这里的grow可以自动增长到100多万个并发连接,而Nginx仅限于worker_connections设置 (在上面的ab.c测试中定义为4096 )。
我不清楚的是,是否每个连接都有内存开销:也就是说,如果nginx或gwan在每次命中都消耗内存?
简而言之,对于所有文件大小,G v4.7+ (在默认情况下禁用内存缓存)占用的内存比Nginx少得多,同时每秒处理更多请求。
长话短说的是,尽管Nginx消耗了越来越多的内存,即使有了新的HTTP保持生命请求,grows的内存使用量对于HTTP保持生命的请求仍然可以保持稳定,而且它的增长速度远远小于Nginx的非保持生命请求。
我们的重量包装器b.c .测量服务器应用程序和系统在测试期间的内存消耗。结果表明,Nginx对系统内存资源消耗的权重更大。
这是由于每个web服务器处理请求和分配内存的方式。
如果我在同一时间有10个5 mb文件的请求,这是否意味着将有50 mb内存用于服务它?可能+线程的内存(我不知道nginx或gwan是否使用线程进行每个连接)。
两台服务器(Nginx和G)都使用sendfile(),因此内核(而不是应用程序)正在为I/O分配资源。
web服务器仍将分配资源,但这是为了维护每个连接的上下文,而不是缓冲磁盘I/O。
因此,内存消耗取决于每个sendfile()调用发送的文件块的大小,而不是直接取决于文件的总大小。
总体文件大小对高并发的长期影响,但这是由于需要由内核缓存的块的数量。
如果还有什么问题,给我们打电话到广域网。我们对类似CDN的应用程序进行了大量投资。
https://serverfault.com/questions/182165
复制相似问题