我正在使用 netstat 命令来帮助正确优化我的 httpd.conf。
结果如下:
netstat -an | grep -c :80
579
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
134 207.x.xx.134 //This was the highest result. Also this is my servers IP address
我知道我自己的 IP 地址返回了 134 个 httpd 连接。我检查了整个网站的脚本,并删除了所有以“http://”开头的 css、js、php 链接 - 但我仍然获得了如此多的连接!
我也在论坛上找到了这个命令,但不知道它显示什么:
ps auxww | grep httpd | wc -l
37
这是我的 httpd.conf:
Timeout 30
TraceEnable Off
ServerSignature Off
ServerTokens ProductOnly
FileETag None
StartServers 2
<IfModule prefork.c>
MinSpareServers 2
MaxSpareServers 4
</IfModule>
ServerLimit 250
MaxClients 800
MaxRequestsPerChild 50
KeepAlive On
KeepAliveTimeout 1
MaxKeepAliveRequests 10
我可以进行哪些改变来最大化我的混合服务器?(运行 Intel(R) Xeon(R) CPU E5620 @ 2.40GHz - 2GB Ram - MYSQL 重型)。
谢谢。
答案1
一些评论,但请注意,鉴于信息量很少,这些评论大部分都是有根据的猜测。您可以随意尝试,如果它们对您不起作用,请忽略它们:
MaxRequestsPerChild
非常低。除非您有特定的理由使用此值,否则请将其设置为合理的高值(1000、10000 等...)或 0 以完全禁用它。KeepAliveTimeout
1 是合理的,但根据您的应用程序,将其设置为稍高一点(2-5)或禁用 KeepAlive 可能会更好。- 对于 2GB 的服务器来说, 800
MaxClients
和ServerLimit
250 太高了,更不用说运行内存消耗很大的 MySQL 的服务器了。例如,如果您希望为 Apache 分配大约 1GB 内存,则这些设置的更合理值是 40-80。确切的值取决于每个 Apache 实例占用多少内存。将这些值设置得太高的风险在于,在高负载期间,机器将开始使用交换内存,这将使服务器的性能降至接近 0。 - 该
ps auxww | grep httpd | wc -l
行仅计算正在运行的 Apache 子进程数(本例中为 37 个)。mod_status扩展是一个更强大/有用的工具,可以确定有多少个子进程正在运行以及它们在做什么。 - 我猜想您有 134 个来自您自己 IP 的连接,这是由于 MySQL 连接,尽管根据您运行的内容,可能还有其他来源。删除其中带有“http”的链接没有意义,并且不会影响此数字(除非您为此内容设置了一些特定的 Apache 代理)。
- 使用时,
netstat
您可能希望包含一个grep ESTABLISHED
管道以仅列出当前已建立的连接,否则您将包含大量旧的 TIME_WAIT 连接。例如,在我的其中一台服务器上,当前列出了 1300 个连接,其中实际上只有 3 个当前处于活动状态。
netstat -anp |grep 'tcp\|udp' | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
答案2
你的命令是错误的——netstat -anp——网络服务器根本没有使用udp,只是tcp。为了进行更好的测试,我会选择一些访问数据库的url和/或可能测试一个完整的流程,并用ab对其进行基准测试
ab ... # http://httpd.apache.org/docs/2.0/programs/ab.html