如何使用 netstat 和 httpd.conf 加速服务器?

如何使用 netstat 和 httpd.conf 加速服务器?

我正在使用 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 以完全禁用它。
  • KeepAliveTimeout1 是合理的,但根据您的应用程序,将其设置为稍高一点(2-5)或禁用 KeepAlive 可能会更好。
  • 对于 2GB 的服务器来说, 800MaxClientsServerLimit250 太高了,更不用说运行内存消耗很大的 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

相关内容