首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为大量静态内容提供多少内存?

为大量静态内容提供多少内存?
EN

Server Fault用户
提问于 2010-09-17 11:18:55
回答 3查看 38.2K关注 0票数 13

我想为我的静态内容制作一个服务器。

我需要提供一些3-10兆的文件-很多。(我还会在这台服务器上放一些.js和.css以及我网站上的图片)。

我想到了nginx和G( http://trustleap.com/ ).

我不知道的是,服务静态内容需要哪些资源?每个文件传输使用多少RAM?

如果我使用一个256 mb (或512 mb)端口和巨大带宽的VPS,我能提供多少个/seconds (3-10mb文件)?(我知道“视情况而定”-但请根据经验或理论给我粗略的估计)。

没有太多的文件,只是经常下载-我应该考虑缓存,或者这将只使用我的内存所需的服务命中?

EN

回答 3

Server Fault用户

回答已采纳

发布于 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低端的大公司。

票数 10
EN

Server Fault用户

发布于 2010-09-17 11:31:48

如果操作系统能够将内容的热点部分缓存到ram中,那么它就不会使用磁盘,并且会非常快地提供服务。在VPS上每秒应该有数百个请求,在进入CPU限制之前,您很可能会使网络饱和。

如果内容不适合ram,那么磁盘IO (查找、吞吐量、文件系统碎片)就会发挥作用,而等式也会发生变化。

few服务器将为每个客户端增加一个内存开销,但nginx可以在每个连接几千字节内完成这一任务。

希望这些建议能帮到你。

票数 6
EN

Server Fault用户

发布于 2013-11-23 09:18:20

服务静态内容需要哪些资源?每个文件传输使用多少RAM?

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

代码语言:javascript
复制
> 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使用线程(每个内核通常使用一个线程),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的应用程序进行了大量投资。

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/182165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档