我的网站在一天中收到大量的stream量(2000点击每分钟)。 一天中的其余时间收到较less的stream量(每分钟500e点击)。 我一直在试验MaxClients和MaxSpareServers的值,但在偷看时间仍然有一些停机时间。
如何根据我拥有的RAM数量来计算我的configuration的最佳值?
每个进程都像36-40M的内存
total used free shared buffers cached Mem: 3096 793 2302 0 0 0 -/+ buffers/cache: 793 2302 Swap: 0 0 0
我现在使用的值
<IfModule prefork.c> StartServers 10 MinSpareServers 22 MaxSpareServers 60 ServerLimit 90 MaxClients 90 MaxRequestsPerChild 400
更新:我发现从我的托pipe服务提供商。
http://kb.mediatemple.net/questions/246/(dv)+HOWTO:+Basic+Apache+performance+tuning+(httpd)
我有极端的软件包,我在MaxClients中使用了190,而不是200.我尝试了半天,我得到了一些malloc错误命令行消息,但是使用free命令,在free列中获得了800M。
如果您的服务器遭遇峰值,那么可能是因为apache处理进程和线程创build的速度非常缓慢(在mpm_prefork模式下,它是每秒1个新的subprocess)。 如果你知道你的“高stream量”需求(假设它是200进程),那么告诉Apache 总是要准备200个进程,即使他们没有做到90%的时间。 当人们进来时你会做好准备。
检查这个方便的演示文稿(老,但很酷) http://www.techpresentations.org/Hacking_Apache_HTTP_Server_at_Yahoo !
无需StartServers,MaxSpareServers,MinSpareServers – 只需MaxClients(常量池大小)
答案很大程度上取决于您所服务的内容的types。 它是dynamic还是静态内容? 它是一个广泛的内容或一个单一的文件?
您可以使用memcached将文档存储在内存中,这样可以大幅度缩小(消除磁盘瓶颈),但这取决于您拥有多less内存以及内容是否变化很大。
需要根据您的服务器硬件(特别是内存)和您正在运行的网站的效率进行testing。 当你宕机的时候发生了什么? 你是否碰到了这些限制? 你内存不足了吗?
你可能也想看看StartServers和ServerLimit。
ServerLimit设置服务器的最大数量,有效限制MaxClients。
StartServers设置启动时的服务器数量。 例如,如果您正在进行抽奖,或者在这两个小时内所有人都会立即点击该网站,则可能是因为无法足够快地产生孩子。
所有这一切说,这真的取决于你的内容是什么。 如果这是一个很大的CGI脚本或者什么的话,那么Apache就必须处理它。 您可能想看看您的机器设置(参考,我们曾经运行与几十个子网站(公告板,图像库等),并在一个单一的双p3 / 900mhz与1GB的邮件运行burningman.com的内存,只有碰到软件限制。
如果您处于内存紧张的情况(VPS),那么您可能需要降低默认的maxclient以防止交换死亡。
如果你不是, 不要碰它 。
调整apache儿童就是像定制编译一个内核那样的东西,在这个东西中,人们压倒性地做了更多的伤害,而不是好的,即使这个伤害只是浪费了一个下午没有任何好处。 事实certificate,在Apache的httpd项目家伙是非常擅长他们做的! 我的意思是说谁会是一个强者?
是dynamic内容的所有stream量? 你有没有考虑过在Apache之前使用nginx来提供所有的静态内容? 它将解放所有的Apache工作人员来处理dynamic环境。
我同意什么笼子说。 不要碰它。
你也可以考虑使用像Varnish或Squid的HTTP代理。 但是再一次,你也需要一些RAM。
如果你可以做一些基准。 使用可以围攻,它会给你一个粗略的想法,你的服务器可以处理。 其次,Apache也是CPU密集型的。 即使你有Gig的RAM和弱的CPU,也不会扩展。
一个优化技巧是使用反向代理前面的Apache。 nginx是一个轻量级的web服务器,作为一个反向代理function非常好。
你必须确保操作系统的内存,如果你消耗所有可用的内存,系统将挂起。 通常情况下,静态内容将使用2/5 MB,dynamic20/25 MB,您有36/40 MB
所以,我们来做一些math:
总内存(以MB为单位)/每个进程的总内存= MaxClients。
设置你将保留512 MB的操作系统,你有2584 MB的其他目的,如Apache。
2584 MB / 36 MB = 71.7
2584 MB / 40 MB = 64.4
ServerLimit限制MaxClients,使用相同的值,但不要使用任意数字。
使用二进制数字,或尝试接近他们根据您的结果。 例:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 64
MaxClients 64
MaxRequestsPerChild 1024
另外,做一些Apache的调整:
保持活跃
MaxKeepAliveRequests 64
KeepAliveTimeout 2
我有一个类似configuration的服务器,每月访问量为300万。
你也可以尝试使用例如Nginx的静态文件,然后需要较less的Apache进程与其余的请求高内存足迹。