我有一台运行Ubuntu Server 12.04 LTS的服务器(2x六核至强E5649 2.53GHz w / HT,32GB RAM和20000 GB带宽)。 服务器运行LAMP只服务一个网站,预计用户数同时为〜15,000。
目前,我有大约2000个用户在线,他们每个人从开始到会话结束,都会运行50个MySQL查询(小数值主要select和插入)。 服务器CPU负载在这个连接数量上是很高的,而32GB的内存使用量差不多是1GB,值得一提的是服务器运行速度非常快,没有任何问题,但我担心的是平均负载。 http://s12.postimage.org/z7hi6mz3h/photo.png
top - 03:02:43 up 9 min, 2 users, load average: 50.83, 30.14, 12.83 Tasks: 432 total, 1 running, 430 sleeping, 0 stopped, 1 zombie Cpu(s): 0.1%us, 0.2%sy, 0.0%ni, 66.5%id, 33.1%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 32939992k total, 3111604k used, 29828388k free, 84108k buffers Swap: 2048280k total, 0k used, 2048280k free, 1621640k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2860 root 20 0 25820 2288 1420 S 3 0.0 0:11.18 htop 1182 root 20 0 0 0 0 D 2 0.0 0:01.46 kjournald 1935 mysql 20 0 12.3g 161m 7924 S 1 0.5 102:31.45 mysqld 11 root 20 0 0 0 0 S 0 0.0 0:00.38 kworker/0:1 1822 www-data 20 0 247m 25m 4188 D 0 0.1 0:01.81 apache2 2920 www-data 20 0 0 0 0 Z 0 0.0 0:01.20 apache2 <defunct> 2942 www-data 20 0 247m 23m 3056 D 0 0.1 0:00.20 apache2 3516 www-data 20 0 247m 23m 3028 D 0 0.1 0:00.06 apache2 3521 www-data 20 0 247m 23m 3020 D 0 0.1 0:00.09 apache2 3664 www-data 20 0 247m 23m 3132 D 0 0.1 0:00.09 apache2 3674 www-data 20 0 247m 23m 3252 D 0 0.1 0:00.06 apache2 3713 www-data 20 0 247m 23m 3040 D 0 0.1 0:00.09 apache2 1 root 20 0 24328 2284 1344 S 0 0.0 0:03.09 init 2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0 0.0 0:00.01 ksoftirqd/0 6 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/0 7 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0 8 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/1 9 root 20 0 0 0 0 S 0 0.0 0:00.00 kworker/1:0 root@server:~/codes# vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- rb swpd free buff cache si so bi bo in cs us sy id wa 19 0 0 29684012 86112 1689844 0 0 19 590 254 231 48 0 47 5 23 0 0 29704812 86128 1697672 0 0 4 320 11100 8121 77 1 22 0 33 0 0 29671044 86156 1705308 0 0 0 5440 13190 9140 95 1 4 0 33 3 0 29670088 86160 1706288 0 0 0 32932 12275 7297 99 0 1 0 35 0 0 29693456 86188 1710724 0 0 4 676 12701 7867 98 1 1 0 ^C
我没有改变任何Ubuntu的默认configuration。 这个强大的服务器的负载正常吗? 有什么优化,我可以使Apache / MySQL的负载最小化? 你有什么build议 ?
编辑:加载平均在52 !!!!!!! http://zertux.com/IMG_0117.PNG
****更新****事实certificate,DBA没有添加索引的表,添加索引后,平均负载显着下降从93到1.2 :)一切都超级棒,谢谢大家的帮助!
对我来说看起来不错。
你有两个6核CPU的12核心。 所以在100%的performance下,你的平均负载应该是12。
平均负载很有趣 。 我不认为这意味着你的想法。
Load average(平均负载)实际上表示在任何一个时间内有多less个进程正在运行,在1,5和15分钟的窗口上进行平均。
看起来像你有点过分,但不是很激烈。
也许使用http://mysqltuner.pl/mysqltuner.pl来了解一下你的mysqld设置如何等于实际使用量。
当然,下一个逻辑步骤是将MySQL和Apache分离到不同的盒子上。 我不确定你还在那个级别,因为你仍然有一大堆的RAM可供MySQL使用。 您可能会发现从查询caching和关键缓冲区变大的一些好处,并可能深入了解MySQL的慢查询日志 ,看看你是否可以优化表。
有大量关于如何读取加载平均值的信息,实际上,将加载平均数除以内核数量更为明智,因此您已经了解了服务器的实际使用情况。
我现在可以看到你有33%的爱荷华州。 我怀疑你有一个相当重写的数据库,这会导致表在写入时被locking,这意味着并发写入不能发生。
在my.cnf上嗅探一下,看起来max_connections是相当高的,但这并不是一个大问题,但是这意味着如果你使用了所有这些,你需要27GB的内存来实现这个function。 这是负载,但不是一个巨大的关注,再次。
考虑 打开 PHP APC操作码caching 。
** 编辑 **
现在看到查询日志,我倾向于认为有几件事情可能会使服务器受益。
如果没有更深入地了解到底是怎么回事,实际上很难说。
使用NewRelic for PHP可能会值得一试。 它是免费的一个月,并倾向于提供良好的洞察不良的代码气味。
或者,我可以咨询;)
在顶级输出中有一个引人注目的点,那就是D状态下的进程数。 一个很好的apache2甚至kjournald甚至在D状态。 已知D状态进程会增加CPU负载。
通常,一个进程在IO上等待时进入D状态。 得到IO之后,再次从D处进入R状态或S状态。接下来,您可以执行实时debugging,以检查这些D状态进程正在运行多长时间。 如果相当一段时间,一个问题。
无论如何,你的问题,如果它是高负荷平均在IOwait为33.1%是伊利诺伊报道的价值。 %usr和%sys没有太多,所以我们可以放心地忽略进程正在失控或者CPU性能不佳或者内存瓶颈。 这个问题显然是iowait。 我主要使用RHEL,所以我不是100%确定的Ubuntu的,如果有任何内置的工具。
我所做的大部分工作是收集top,vmstat一段时间的迭代,iostat一段时间(显示设备分解的适当的开关),一次ps和ps -xv的迭代并检查它们。 通常,第一级的debugging可以从这么多。 接下来,我可能会收集一些oprofile,perf输出取决于RHEL版本,但这是另一回事。
无论如何,请同时检查所有debugging命令,以获得更精细的视图。
我怀疑进程可能在IO上等待,这可能导致平均负载变高。 所有加载平均值都依赖于cpu的可运行进程的队列。 你看到iostat命令有什么高价值吗?
基本上在最servlets器负载的时候,我曾经有过这种情况,网站似乎响应很慢。
上面没有提到任何消耗太多内存或cpu的进程。 但惊人的事情是Server Laod和CPU的等待时间。 就你的情况而言,这是33%。
在我的情况下,问题原来是在服务器托pipe公司的问题。 在他们最终决定改变存储之前,他们的SAN一直performance得非常慢。 只有在我的服务器开始工作正常。
我的VPS不是专用服务器。
我有一个类似的问题与桌面版本的Ubuntu 12.04(它被用作服务器(不是我的select))。
如果你在你的机器上安装了桌面pipe理器,你可能会发现vsync是个问题。
Unity的DM导致我一个永恒的CPU负载提升我切换vsync立即解决这个问题。 我不知道其他DM是否也造成这个问题。