我如何configurationApache使用更多的CPU?

Apache线程堆积在我的一个Web服务器上(300-500个同时请求,一些需要3-8s处理!),但CPU使用率很低(〜10%)。 页面加载时间正在减慢。 我有很多空闲的CPU功率。 我怎样才能更多地使用它来更快地处理这些线程呢?

这是顶部的顶部…

Tasks: 469 total, 1 running, 468 sleeping, 0 stopped, 0 zombie Cpu(s): 8.1% us, 1.7% sy, 0.0% ni, 90.3% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 9181012k total, 7998772k used, 1182240k free, 0k buffers Swap: 0k total, 0k used, 0k free, 0k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 11351 apache 15 0 364m 30m 17m S 11.9 0.3 0:00.73 httpd 7527 apache 15 0 365m 36m 23m S 8.6 0.4 0:01.76 httpd 7607 apache 16 0 364m 35m 22m S 2.3 0.4 0:01.47 httpd 11498 apache 17 0 359m 19m 11m S 2.3 0.2 0:00.07 httpd 11497 apache 16 0 362m 23m 13m S 1.7 0.3 0:00.05 httpd 1840 apache 15 0 366m 44m 29m S 1.3 0.5 0:03.74 httpd 5358 apache 15 0 364m 36m 24m S 1.3 0.4 0:02.58 httpd 8090 apache 15 0 365m 31m 17m S 1.3 0.3 0:01.10 httpd 11346 apache 15 0 361m 28m 18m S 1.3 0.3 0:00.12 httpd 4051 apache 16 0 365m 40m 27m S 1.0 0.5 0:01.72 httpd 32575 apache 16 0 365m 42m 28m S 0.7 0.5 0:03.62 httpd 5145 apache 16 0 365m 37m 24m S 0.7 0.4 0:02.23 httpd 8173 apache 16 0 363m 35m 23m S 0.7 0.4 0:00.29 httpd 5466 apache 15 0 365m 31m 18m S 0.3 0.4 0:01.18 httpd 7420 apache 16 0 364m 36m 23m S 0.3 0.4 0:01.24 httpd 11485 apache 16 0 362m 23m 12m S 0.3 0.3 0:00.04 httpd 1 root 15 0 10272 612 584 S 0.0 0.0 0:02.78 init 30129 root 16 -4 12536 400 396 S 0.0 0.0 0:00.00 udevd 30402 root 16 0 5840 580 480 S 0.0 0.0 0:14.01 syslogd 30414 rpc 18 0 7992 408 404 S 0.0 0.0 0:00.00 portmap 30439 root 18 0 10088 548 544 S 0.0 0.0 0:00.00 rpc.statd 30478 memcache 15 0 141m 5364 516 S 0.0 0.1 1:16.34 memcached 30496 root 16 0 60604 744 636 S 0.0 0.0 0:07.31 sshd 30507 root 15 0 21572 796 688 S 0.0 0.0 0:04.56 xinetd 31817 root 15 0 166m 932 860 S 0.0 0.0 0:00.03 httpsd 31820 psaadm 15 0 175m 7992 4596 S 0.0 0.1 0:02.31 httpsd 31924 root 15 0 19704 924 552 S 0.0 0.0 0:02.50 crond 13316 root 16 0 98528 3628 2796 S 0.0 0.0 0:00.01 sshd 1655 root 19 0 8600 1180 972 S 0.0 0.0 0:00.00 mysqld_safe 1695 mysql 16 0 4268m 464m 4684 S 0.0 5.2 10:05.19 mysqld 32564 root 16 0 98528 3612 2780 S 0.0 0.0 0:00.00 sshd 28489 root 15 0 98528 3628 2796 S 0.0 0.0 0:00.00 sshd 32152 root 16 0 98528 3612 2780 S 0.0 0.0 0:00.01 sshd 5781 root 15 0 98528 3628 2796 S 0.0 0.0 0:00.01 sshd 7801 root 17 0 356m 11m 5472 S 0.0 0.1 0:05.74 httpd 7804 apache 16 0 366m 36m 21m S 0.0 0.4 0:00.35 httpd 7805 apache 16 0 370m 31m 13m S 0.0 0.4 0:00.11 httpd 8172 apache 15 0 366m 34m 19m S 0.0 0.4 0:00.62 httpd 9430 apache 16 0 365m 45m 32m S 0.0 0.5 0:02.67 httpd 11393 apache 16 0 363m 37m 25m S 0.0 0.4 0:00.75 httpd 11551 apache 17 0 360m 31m 22m S 0.0 0.4 0:00.24 httpd 32345 apache 16 0 364m 39m 27m S 0.0 0.4 0:02.86 httpd 32472 apache 16 0 394m 70m 27m S 0.0 0.8 0:03.77 httpd 32488 apache 16 0 364m 42m 29m S 0.0 0.5 0:02.38 httpd 32501 apache 16 0 365m 41m 28m S 0.0 0.5 0:01.71 httpd 32644 apache 16 0 365m 36m 23m S 0.0 0.4 0:01.79 httpd 32765 apache 15 0 364m 39m 26m S 0.0 0.4 0:02.65 httpd 1334 apache 16 0 368m 42m 26m S 0.0 0.5 0:02.77 httpd 1339 apache 15 0 362m 39m 29m S 0.0 0.4 0:01.84 httpd 1351 apache 15 0 364m 43m 30m S 0.0 0.5 0:02.59 httpd 1553 apache 16 0 363m 41m 29m S 0.0 0.5 0:02.74 httpd 1555 apache 16 0 365m 37m 24m S 0.0 0.4 0:01.59 httpd 1564 apache 15 0 365m 40m 27m S 0.0 0.5 0:01.88 httpd 1569 apache 16 0 364m 35m 22m S 0.0 0.4 0:00.63 httpd 1573 apache 15 0 367m 39m 24m S 0.0 0.4 0:01.66 httpd 1575 apache 16 0 363m 36m 24m S 0.0 0.4 0:01.88 httpd 1583 apache 16 0 364m 34m 21m S 0.0 0.4 0:01.92 httpd 1594 apache 15 0 367m 44m 29m S 0.0 0.5 0:03.71 httpd 1689 apache 15 0 365m 38m 24m S 0.0 0.4 0:01.47 httpd 1690 apache 15 0 365m 39m 26m S 0.0 0.4 0:01.18 httpd 1710 apache 16 0 363m 34m 23m S 0.0 0.4 0:00.99 httpd 1725 apache 15 0 364m 39m 26m S 0.0 0.4 0:01.80 httpd 1726 apache 16 0 365m 40m 26m S 0.0 0.5 0:00.90 httpd 1737 apache 16 0 364m 30m 17m S 0.0 0.3 0:00.46 httpd 1919 apache 15 0 363m 34m 22m S 0.0 0.4 0:00.83 httpd 1930 apache 16 0 364m 33m 21m S 0.0 0.4 0:00.50 httpd 1934 apache 15 0 364m 40m 27m S 0.0 0.5 0:02.20 httpd 

而关键的httpd.conf设置:

 Timeout 120 KeepAlive On MaxKeepAliveRequests 200 KeepAliveTimeout 3 <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule> <IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> 

要configurationApache以使用更多的CPU,您需要摆脱目前阻止Apache使用更多CPU的瓶颈。 因为请求需要3-8秒才能完成,你知道有一些瓶颈,你需要find它。

需要注意的是:

  • 确定Apache主机是否是瓶颈。 如果在请求需要3-8秒的uptime运行uptime运行uptime ,负载是否显示为高电平(双位或三位数字)? 你不能真正阅读很多,因为高负载可能意味着其他地方存在的问题,但如果负载低,而请求需要3-8秒,这可能是一个远程问题。
  • 如果您在其他机器(如数据库)上具有此服务所需的资源,请检查系统负载。
  • 查看服务器上“vmstat 1”的输出。 这将显示系统利用率统计信息,每秒更新一次。 需要注意的是“cpu wa”(如果是两位数字,这可能意味着光盘已经饱和),“swap si / so”(如果它们不为零,则意味着内存不足)以及“cpu id “(空闲CPU时间,如果<10,则CPU处于饱和状态)。 如果“cpu sy”时间很长,这可能表明您分叉太多(也许Apache MaxRequests太低?)或其他内核级别的开销。 按Control-C结束“vmstat 1”输出。
  • 您可以运行“strace -p [APACHE PROCEED ID]”来了解Apache进程在做什么。 这显示了他们正在进行的系统调用,但是如果您不熟悉系统调用,则有时可以通过将输出作为文本读取来获取信息。 例如,上周我有一个像你一样的服务器,strace会暂停几秒钟,显示的最后一个东西是日志消息,我跟踪到一个PHP文件,发送一堆日志消息到系统日志。

如果你没有安装“munin”,你可能应该。 如果这样做,请查看图表,以查看系统在缓慢响应和运行良好时系统利用率的变化情况。 如果您在图表中看到跳跃,那么可能会显示瓶颈在哪里。 如果在所有图表中看到空白区域,则可能意味着系统已经饱和。 如果只有Apache图表是空白的,那么可能意味着Apache达到了最大连接数,这可能是性能问题的一个副作用。

还要注意,如果你有多个CPU,但是你有一个单线程的应用程序,就像坐在Apache后面的Zope一样,那么你的一个CPU在其他地方闲置的时候就已经饱和了。 如果您在顶部按“1”,将显示每个核心的利用率。 找一个空闲时间为0%的人,其他人闲置得多。

使用这些技术,我已经能够隔离和解决大多数与此类似的性能问题。

如果你仔细观察apache性能上的许多问题,你会得到一些线索。

你已经从你的httpd.conf文件中省略了很多信息,我们需要看看服务器是如何configuration的 – otoh你已经包含了线程和前叉configuration – 你正在使用哪一个?

CPU使用率非常低(〜10%)。 页面加载时间正在减慢

不,你已经完全倒退了。 页面加载时间正在减慢,但唯一可以打折扣的因素是CPU的减速。

有些事情你可以用CPU来做,这可能会缓解其他地方的性能问题(使用压缩,软件突袭),但真正的错误在于别处。

什么是平均RTT(从HTTPstream量,而不是ICMP)? 有多less磁盘I / O? 内存configuration文件是什么样的? 你只是服务静态内容? 如果没有什么参与生成的内容? 你是否监视了服务器内外的networkingstream量,看看你有没有想到的东西? 您是否审核了发布的caching说明?