如果我想防止这种高负载,我应该怎么做。
当负载高于 8 时,我的网站变慢了。
也请查看 iotop 结果。
顶部 - 20:23:10 向上 127 天,3:22,1 位用户,平均负载:9.92、9.87、9.81 任务:总共1031个,运行3个,睡觉1027个,停止0个,僵尸1个 中央处理器:14.7%us、0.7%sy、0.1%ni、79.6%id、4.7%wa、0.0%hi、0.2%si、0.0%st 内存:总计 16413676k,已使用 16312548k,空闲 101128k,缓冲区 110836k 交换:总共 10190840k,已使用 3182468k,免费 7008372k,缓存 2033604k PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令 2776 mysql 15 0 14.6g 10g 5220 S 405.7 67.4 21710:40 mysqld 6201 阿帕奇 15 0 369m 16m 5356 S 3.7 0.1 0:00.40 httpd 8447 阿帕奇 15 0 368m 15m 5364 S 3.7 0.1 0:00.27 httpd 10807 阿帕奇 16 0 368m 14m 4640 S 3.7 0.1 0:00.04 httpd 11074 根 15 0 11548 1668 676 R 3.7 0.0 0:00.04 顶部 2088 阿帕奇 15 0 368m 15m 5972 S 1.8 0.1 0:00.93 httpd 2737 根 15 0 3824 392 336 S 1.8 0.0 433:37.40 klogd 6879 阿帕奇 15 0 367m 15m 5652 S 1.8 0.1 0:00.39 httpd 8457 阿帕奇 15 0 367m 15m 5744 S 1.8 0.1 0:00.54 httpd 8866 阿帕奇 15 0 369m 15m 4832 S 1.8 0.1 0:00.18 httpd 9147 阿帕奇 15 0 368m 14m 4960 S 1.8 0.1 0:00.15 httpd 9884 阿帕奇 16 0 368m 16m 6508 S 1.8 0.1 0:03.97 httpd 10583 阿帕奇 16 0 368m 15m 5148 S 1.8 0.1 0:00.10 httpd 10731 阿帕奇 15 0 367m 13m 3484 S 1.8 0.1 0:00.16 httpd 10782 阿帕奇 16 0 367m 12m 3544 S 1.8 0.1 0:00.04 httpd 14618 阿帕奇 15 0 367m 16m 6736 S 1.8 0.1 0:03.24 httpd 18697 阿帕奇 15 0 368m 16m 6744 S 1.8 0.1 0:02.47 httpd
虚拟机统计 procs ----------memory------------ ---swap-- -----io---- --system-- -----cpu ------ rb swpd free buff cache si so bi bo in cs us sy id wa st 2 1 3182636 468436 111776 2012016 0 0 94 274 0 0 15 1 80 5 0
iostat Linux 2.6.18-274.12.1.el5 () 12/31/2012 avg-cpu: %user %nice %system %iowait %steal %idle 14.66 0.12 0.93 4.73 0.00 79.56 设备:tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn 122.97 1504.32 4383.82 16525670026 48158254126 sda1 0.00 0.04 0.00 435456 230 sda2 122.97 1504.28 4383.82 16525231218 48158253896 dm-0 570.94 1502.31 4381.94 16503546226 48137527328 dm-1 0.48 1.97 1.89 21684608 20727136
顶 总磁盘读取:126.48 K/s | Total DISK WRITE:6.79 M/s(这不是太高了吗?) TID PRIO 用户磁盘读取磁盘写入交换 IO> 命令 15610 是/4 mysql 0.00 B/s 0.00 B/s 99.99 % 25.76 % mysqld --basedi~mysql/mysql.sock 15622 是/4 mysql 0.00 B/s 0.00 B/s -7.28 % 24.92 % mysqld --basedi~mysql/mysql.sock 3659 是/4 mysql 7.44 K/s 5.88 M/s 0.00 % 13.71 % mysqld --basedi~mysql/mysql.sock 2822 是/4 mysql 0.00 B/s 0.00 B/s 2.88 % 10.22 % mysqld --basedi~mysql/mysql.sock 2819 是/4 mysql 0.00 B/s 0.00 B/s 0.00 % 9.71 % mysqld --basedi~mysql/mysql.sock 15635 是/4 mysql 0.00 B/s 0.00 B/s -3.72 % 8.09 % mysqld --basedi~mysql/mysql.sock 15629 是/4 mysql 0.00 B/s 0.00 B/s -2.42 % 5.58 % mysqld --basedi~mysql/mysql.sock 801 be/3 根 0.00 B/s 208.31 K/s 0.00 % 3.97 % [kjournald] 2842 be/4 根 0.00 B/s 0.00 B/s 8.09 % 3.81 % irqbalance 2820 是/4 mysql 0.00 B/s 0.00 B/s 0.00 % 2.88 % mysqld --basedi~mysql/mysql.sock 7001 be/4 阿帕奇 0.00 B/s 0.00 B/s 0.00 % 2.70 % httpd 15636 是/4 mysql 0.00 B/s 0.00 B/s 10.32 % 2.51 % mysqld --basedi~mysql/mysql.sock 8034 be/4 阿帕奇 0.00 B/s 0.00 B/s 0.00 % 2.42 % httpd 2140 be/4 阿帕奇 0.00 B/s 0.00 B/s 0.00 % 2.32 % httpd
由于 mySQL 将您推向交换空间的深度,您的特定问题肯定与 I/O 相关。理想情况下,您应该在绝大多数时间使用零交换,因为操作系统开始将内存交换到磁盘的那一刻,您的性能将随着进程等待 I/O 而急剧下降。可以把它想象
Performance = 1 / N ^ swap
成当操作系统使用更多的交换空间时,性能通常会呈指数级下降。您的交换空间似乎有 3 GB的深度,这对我来说简直太可怕了。如果,在你像你提到的那样调整你的 mySQL 设置之后,你仍然平均交换超过几兆字节,你应该考虑:[最好到最坏的想法,2 和 3 大致并列]
更快的服务器,更好的编程?
说真的,你从错误的角度看它。就像“我是一名出租车司机,我每天开太多公里,我该如何减少”。您的请求方是固定的(不考虑 ddos 攻击等问题)并且必须提供项目。
所以它会变成 - 获得更强大的服务器,分配更多的内存用于缓存(更强大的服务器)或者用“修复你的错误”棒来打击一些程序员,让他们写出更好的代码。
在这种情况下,它可能是一个 mySql 问题,但是这将作为“使用索引,伙计”或“写出更好的查询”返回给网站的开发人员。并不是说我没有看到(sql server、门户网站、零索引、服务器“死亡”,IO 吞噬了一切)。但这是网站开发人员必须修补的问题。
从此处的数据来看,您正在交换。这真的会扼杀你的表现,因为这是任何类型的交换所做的。
我的直接建议是将机器中的内存量增加一倍……当然还要增加交换空间以匹配内存大小。
我认为Mysql是你的问题。您正在使用所有导致交换的内存。交换导致更高的 cpu,因为您的交换分区正在填充并且您的 IO 无法处理其他任何事情。如您所见,您的交换正在使用中,但尚未满。虽然更快的磁盘很有趣,但您也应该增加内存。Swap 仅供偶尔使用,而不是经常使用。