运行Ubuntu Server 12.04 LTS.服务器运行LAMP并仅服务一个网站,估计用户数量同时约为15,000.
目前我有大约2000个在线用户,每个用户从开始到会话结束时运行50个MySQL查询(小值,主要是选择和插入).服务器cpu负载在这个连接数量很高,而RAM使用率几乎是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---- r b 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附带的任何默认配置.这种强大的服务器的负载是否正常?我可以对Apache / MysqL进行任何优化以最小化负载吗?您有什么推荐的吗 ?
编辑:52负载平均!!!!!!!
http://zertux.com/IMG_0117.PNG
**** ****更新
事实证明,DBA没有为表添加索引,在添加索引之后,平均负载平均值从93下降到1.2 :)一切都非常棒,感谢大家的帮助!
你有12个内核..跨2x 6核cpu.因此,在100%性能下,您的平均负载应为12.
Load average is funny.我认为这并不意味着你的意思.
负载平均值实际上表明在任何时间运行了多少进程,平均超过1,5和15分钟的窗口.
在我看来,你有点过分,但不是很大.
也许使用http://mysqltuner.pl/mysqltuner.pl来了解你的MysqLd设置如何等同于实际使用量.
当然,下一个合乎逻辑的步骤是将MysqL和Apache分离到不同的盒子上.我不确定你是否处于那个级别,因为你还有一大堆免费的RAM可供MysqL吸收.您可能会发现查询缓存和密钥缓冲区更大的一些好处,可能会更深入地了解MySQL’s slow query log,看看您是否可以优化表格.
有大量关于如何读取负载平均值的信息,实际上将负载平均数除以核心数更为明智,因此您已经了解了服务器的实际使用情况.
我现在可以看到你有33%的爱荷华州.我怀疑……你有一个相当大量写入的数据库,这会导致在写入时锁定表,这意味着并发写入不会发生.
在my.cnf上有had a sniff,看起来max_connections相当高,但这不是一个大问题,但它确实意味着如果你使用所有这些,你需要27GB的RAM才能允许这个.哪个是负载,但又不是一个巨大的问题.
Consider turning关于PHP APC操作码caching.
**编辑**
现在看过查询日志之后,我倾向于认为有一些东西可能会使服务器受益.
> PHP APC操作码缓存(通常使apache更高效)
>将所有表转换为InnoDB,除非您有充分的理由.如果这个原因是全文搜索,找到一个更好的方法,并转移到InnoDB.
>购买另一台服务器,并使其成为专用的数据库主机.将其与SAS磁盘匹配,并将其分成多个分区,以便日志记录和数据位于单独的磁盘轴上(或者更确切地说,是RAID阵列).
如果没有更深入地了解到底是怎么回事,实际上很难说.
可能值得用NewRelic for PHP进行试运行.它可以免费使用一个月,并且确实可以很好地洞察不良代码气味.
或者,我可以咨询;)