我在 amazon ec2 上有 Fedora 8 32 位 vps
1.7G 内存
经过几次运行(不知道有多少次),服务器就卡住了,无法加载(无法通过 http:// 访问)
当使用'top'时我得到:
1948 memcache 15 0 33048 856 424 S 0.0 0.0 0:00.04 memcached
2031 root 25 0 2640 1208 1040 S 0.0 0.1 0:00.00 mysqld_safe
2091 mysql 18 0 137m 24m 5472 S 0.0 1.4 0:09.16 mysqld
6690 root 18 0 59928 7968 4712 S 0.0 0.5 0:00.01 httpd
6692 apache 15 0 61100 18m 14m S 0.0 1.1 0:00.10 httpd
6693 apache 22 0 69996 40m 27m S 0.0 2.4 0:00.73 httpd
6694 apache 18 0 64744 27m 19m S 0.0 1.6 0:00.87 httpd
6695 apache 15 0 82488 53m 28m S 0.0 3.1 0:02.25 httpd
6696 apache 15 0 67408 36m 25m S 0.0 2.1 0:00.93 httpd
6697 apache 15 0 64248 26m 18m S 0.0 1.5 0:00.23 httpd
6698 apache 15 0 65884 27m 17m S 0.0 1.6 0:00.38 httpd
6699 apache 18 0 64840 26m 17m S 0.0 1.5 0:00.42 httpd
6700 apache 15 0 66324 34m 25m S 0.0 2.0 0:00.93 httpd
6702 apache 15 0 68668 29m 17m S 0.0 1.7 0:01.20 httpd
6703 apache 16 0 60344 10m 6788 S 0.0 0.6 0:00.01 httpd
6704 apache 15 0 65784 27m 18m S 0.0 1.6 0:00.84 httpd
6705 apache 15 0 60336 10m 6596 S 0.0 0.6 0:00.00 httpd
6706 apache 15 0 65948 27m 18m S 0.0 1.6 0:00.83 httpd
6707 apache 15 0 64836 25m 17m S 0.0 1.5 0:00.19 httpd
6708 apache 15 0 67104 26m 16m S 0.0 1.6 0:00.21 httpd
我不知道它有多少 mb,只有'service httpd restart'才能让它再次上线,我没有太多的流量,因为它现在只是测试服务器
我安装了 php5.2.6 和 mysql 5.1.6
以下是配置的部分:
Timeout 25
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 3
<IfModule prefork.c>
StartServers 20
MinSpareServers 20
MaxSpareServers 50
ServerLimit 500
MaxClients 500
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
HostnameLookups Off
可能是什么问题?谢谢
编辑:我注意到像 .html、.txt 这样的静态文件可以很好地服务
当使用 php 时我们遇到了问题,我测试了 2 个简单的脚本:
<?php getcwd(); ?>
<?php phpinfo(); ?>
php 作为 apache_module 加载
php 内存限制为 128M
可能是什么问题?再次感谢
答案1
对于只有 1.7G 内存的服务器来说,150 个 KeepAliveRequests 太多了。将其减少到 30-50。您还应该减少最大实例数。您无法在该内存中容纳 500 个实例,我会在这里放置 200-300 个。
我建议你的应用程序是否需要你给 php 的那 128M?如果不需要,也减少它。
启用扩展服务器状态并查看http://服务器/服务器状态/进行进一步优化。
答案2
我认为您启动了太多服务器实例。您使用哪个模块作为工作模块?prefork.c 还是 worker.c?
如果您使用 prefork.c,请将“StartServers”、MinSpareServers 和 MaxSpareServers 的值设置为较低的值,然后查看服务器是否再次挂起。
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 500
MaxClients 500
MaxRequestsPerChild 1000
</IfModule>
还要检查 apache 错误日志是否存在问题。