我使用以下规格运行服务器:
从历史上看,所有扩展服务的问题都是磁盘绑定的,但是目前我们看到的负载数量比以前更高,特别是在更新到Ubuntu 10.04之后。 服务器每秒处理约50个请求。 交换不使用,不应该被激活。 MySQL数据集是几千兆字节,但访问应该相当不错的优化。
> top top - 10:42:50 up 16 days, 18:49, 1 user, load average: 20.02, 16.17, 11.44 Tasks: 277 total, 4 running, 273 sleeping, 0 stopped, 0 zombie Cpu0 : 38.6%us, 3.3%sy, 0.0%ni, 58.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 37.9%us, 3.3%sy, 0.0%ni, 58.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 25.9%us, 3.0%sy, 0.0%ni, 69.5%id, 1.3%wa, 0.0%hi, 0.3%si, 0.0%st Cpu3 : 23.5%us, 2.0%sy, 0.0%ni, 67.9%id, 0.0%wa, 0.0%hi, 6.6%si, 0.0%st Cpu4 : 16.4%us, 1.3%sy, 0.0%ni, 82.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu5 : 15.3%us, 1.3%sy, 0.0%ni, 83.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu6 : 14.3%us, 1.0%sy, 0.0%ni, 84.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu7 : 2.3%us, 0.6%sy, 0.0%ni, 97.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 8187668k total, 8117276k used, 70392k free, 178920k buffers Swap: 4198968k total, 2084k used, 4196884k free, 6159328k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 32216 mysql 20 0 2026m 788m 4132 S 41 9.9 1292:40 mysqld 8104 www-data 20 0 491m 106m 95m S 4 1.3 1:57.62 apache2 27072 www-data 20 0 684m 112m 101m S 4 1.4 2:51.47 apache2 3391 www-data 20 0 683m 109m 98m S 4 1.4 2:22.29 apache2 16822 www-data 20 0 682m 114m 104m S 4 1.4 3:33.05 apache2 27068 www-data 20 0 555m 113m 102m S 4 1.4 2:53.77 apache2 27118 www-data 20 0 683m 119m 106m S 4 1.5 4:41.48 apache2 1036 www-data 20 0 685m 112m 100m S 3 1.4 2:27.24 apache2 3503 www-data 20 0 556m 81m 70m S 3 1.0 0:33.77 apache2 29803 www-data 20 0 682m 111m 101m S 3 1.4 2:47.09 apache2 1345 www-data 20 0 491m 115m 104m S 3 1.4 4:04.62 apache2 3001 www-data 20 0 379m 109m 98m S 3 1.4 2:13.36 apache2 [... 75 Apache processes with similar specs, but less CPU]
我的问题是 – 你通常看到高负荷数字的任何问题? resoponstime增加了,但只有30%左右。 负载数字在某种程度上是否包含磁盘活动? 你有什么意见,我应该在优化过程中关注什么? 非常感谢你!
> iotop Total DISK READ: 179.70 K/s | Total DISK WRITE: 1735.81 K/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 16512 be/4 mysql 0.00 B/s 22.94 K/s ?unavailable? mysqld 20701 be/4 mysql 0.00 B/s 0.00 B/s ?unavailable? mysqld 21556 be/4 mysql 0.00 B/s 22.94 K/s ?unavailable? mysqld 28998 be/4 www-data 0.00 B/s 3.82 K/s ?unavailable? apache2 -k start 12771 be/4 mysql 0.00 B/s 3.82 K/s ?unavailable? mysqld 16824 be/4 www-data 0.00 B/s 3.82 K/s ?unavailable? apache2 -k start 2700 be/4 mysql 0.00 B/s 7.65 K/s ?unavailable? mysqld 3074 be/4 mysql 22.94 K/s 0.00 B/s ?unavailable? mysqld 17585 be/4 mysql 0.00 B/s 15.29 K/s ?unavailable? mysqld 30723 be/4 mysql 7.65 K/s 0.00 B/s ?unavailable? mysqld 29906 be/4 www-data 0.00 B/s 3.82 K/s ?unavailable? apache2 -k start 29907 be/4 mysql 0.00 B/s 15.29 K/s ?unavailable? mysqld 13547 be/4 www-data 0.00 B/s 3.82 K/s ?unavailable? apache2 -k start 7444 be/4 www-data 0.00 B/s 3.82 K/s ?unavailable? apache2 -k start 1944 be/4 mysql 149.11 K/s 0.00 B/s ?unavailable? mysqld 16825 be/4 mysql 0.00 B/s 7.65 K/s ?unavailable? mysqld 32223 be/4 mysql 0.00 B/s 3.82 K/s ?unavailable? mysqld 7801 be/4 www-data 0.00 B/s 3.82 K/s ?unavailable? apache2 -k start 5808 be/4 mysql 0.00 B/s 11.47 K/s ?unavailable? mysqld 8104 be/4 www-data 0.00 B/s 3.82 K/s ?unavailable? apache2 -k start 18890 be/4 www-data 0.00 B/s 0.00 B/s ?unavailable? apache2 -k start 1 be/4 root 0.00 B/s 0.00 B/s ?unavailable? init 2 be/4 root 0.00 B/s 0.00 B/s ?unavailable? [kthreadd] 3 rt/4 root 0.00 B/s 0.00 B/s ?unavailable? [migration/0]
在Linux上,平均负载包括处于不间断睡眠(包括磁盘访问)的进程。 但是,您的最高输出似乎并不表示很多的IO等待时间。 由于最高百分比是平均值,所以我可能会在高频率更新(也许是-d.1或-d.5)中运行最高,并查找在默认轮询频率中没有显示的IO等待中的尖峰作为下一步。
标准的系统指标(负载,CPU,内存等)通常是系统性能受到限制的良好指标 – 但最终性能价值是关于如何快速为请求提供服务。 在实践中,监视这些度量和设置阈值是一个好主意,但最终这些只是系统实际性能的指示。
我认为架构可能会更好一些 – 粗略猜测,你所描述的服务器的成本可能已经为数据库购买了4Gb /双处理器/ raid 1+(5/0),并且至less有2个低规格机器运行Web服务器上(我猜那里有mod_php或mod_perl在那里),这可能会显着更快。
当然,这似乎是mysqld进程造成的大部分痛苦 – 但它看起来像apache是做了相当多的I / O。 有多less内存ID用于I / Ocaching? 这些Apache进程的RSS也看起来很高(VIRT的大小 – 也许是高RSS的结果)大约是我能find的最近的LAMP框的值的10倍。
我build议遵循这里的惯例,但先看看mysql的东西:
MySQL的 – 你有缓慢的查询日志logging启用? 你有没有分析它,以确定潜在的数据库优化
你对你的安装运行mysqltuner吗?
HTTPcaching – 你发送静态内容的好caching信息? 禁用条件请求?
为什么你的apache进程如此之大? 你真的需要所有这些模块吗?
用户的RTT范围是多less? 你有压缩启用静态文本/ HTML内容和脚本输出?
如果你正在运行一个PHP站点,你有一个操作码caching(例如APC,ioncude,Zend)运行吗?
HTH
我个人担心MySQL的高CPU使用率。 尽pipe顶部只是一个快照; 如果你看到一贯固定在50%的MySQL的CPU,我会执行一些步骤,以确保为什么。
负载趋于成倍增长。 MySQL达到50%所花费的时间远远超过了达到100的时间