我用通常的LAMP堆栈(prefork Apache MPM)+ suPHP租用Gentoo服务器。
有时,我的服务器内存不足,速度变慢(响应ping,但实际上不可能login,而通过SSH发送的击键可能需要几分钟的时间才能回显,处理的更less)。 在系统日志中也有很多oom_killer的东西。
这是我在其中一个时刻看到的top
:
顶部 - 16:45:05最多22天,8:08 3用户,平均负载:104.26,103.87,93.3 任务:共393次,跑步1次,睡眠388次,停止0次,僵尸4次 Cpu:4.6%us,9.3%sy,0.8%ni,0.0%id,84.8%wa,0.0%hi,0.5%si,0.0%st Mem:总共2042128k,使用1634392k,使用407736k,缓冲1792k 交换:共0k,已用0k,免费0k,caching了27724k PID用户PR NI VIRT RES SHR S%CPU%MEM时间+命令 3125 apache 20 0 288m 105m 1368 S 0 5.3 0:01.00 apache2 2886 apache 20 0 285m 102m 1368 S 0 5.1 0:02.44 apache2 3048 apache 20 0 279m 96m 1192 D 0 4.8 0:01.58 apache2 3037 apache 20 0 278m 95m 1076 S 0 4.8 0:02.23 apache2 3014 apache 20 0 278m 94m 1204 D 0 4.8 0:01.81 apache2 2859 apache 20 0 274m 91m 1368 S 0 4.6 0:00.63 apache2 3016 apache 20 0 269m 86m 1368 S 0 4.3 0:01.49 apache2 2887 apache 20 0 269m 86m 1192 D 0 4.3 0:01.06 apache2 2753 apache 20 0 269m 86m 1368 S 0 4.3 0:01.09 apache2 3036 apache 20 0 266m 83m 1372 S 1 4.2 0:01.10 apache2 3006 apache 20 0 266m 83m 1368 S 0 4.2 0:01.98 apache2 3007 apache 20 0 265m 82m 1372 S 0 4.1 0:02.00 apache2 3064 apache 20 0 264m 81m 1368 S 0 4.1 0:00.57 apache2 3045 apache 20 0 263m 80m 1368 S 0 4.1 0:00.60 apache2 2888 apache 20 0 263m 79m 416 S 0 4.0 0:01.09 apache2 2862 apache 20 0 260m 77m 1368 S 1 3.9 0:01.95 apache2 2891 apache 20 0 259m 76m 1332 D 0 3.9 0:01.98 apache2 3046 apache 20 0 258m 75m 1080 S 0 3.8 0:01.20 apache2 2873 apache 20 0 255m 72m 1380 S 0 3.6 0:01.51 apache2 2987 apache 20 0 252m 69m 1368 S 0 3.5 0:01.04 apache2 2666 apache 20 0 250m 67m 1368 S 0 3.4 0:00.72 apache2 2903 apache 20 0 248m 66m 1368 S 0 3.3 0:01.02 apache2 3013 apache 20 0 247m 63m 416 S 0 3.2 0:01.02 apache2
请注意,PHP运行在CGI模式下,所以这只是没有任何PHP模块的Apache。
坦率地说,我不明白为什么除了运行内存之外,它还会很慢,但它声称它有400 MB的可用内存。 “84.8%wa”也表示系统正在等待I / O操作(分页?)。
我试过的东西:
调整MPM设置:
StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 50 MaxRequestsPerChild 10 MaxMemFree 1024
现在我已经把MaxClients
减less到25了,但是现在页面请求需要花费几秒钟的时间来处理,而一些使用FlashGet的孩子理论上可以堵塞所有的Apache进程,并且使所有的网站都无法访问:
问题:
任何人都可以提出一些Apacheconfiguration调整,可以从根本上改善我的情况?
是否有可能告诉Linux不交换/页出sshd,bash和其他所有我需要ssh和杀死失控进程?
如果对上述问题的答案是“不”,那么请向我解释一下,在当今这个时代,现代操作系统是如何可怕的缺陷。 听起来像史诗般的操作系统devise失败给我:(
您的apache进程每个使用大约80 MB的内存(RES列)。 这是巨大的 – 在这里我有一个Web服务器与Apache 2.2用于运行CGIs和每个进程使用约5 MB。 现在,如果你有50个Apache进程,每个进程使用80MB,那么你就像地狱交换。 一旦我们发现你为什么要消耗这么多的记忆,我们可能会解决这个问题。
你可以发布你的Apacheconfiguration文件?