好吧,我有一个很好的专用服务器,运行CentOS 6 16克内存,双氙气处理器等,但我一直在经历高负荷,由于MySQL。 随机负载将低于1.0,页面生成时间将<30ms,网站平稳运行。 这是约100个并发用户,服务less于200页/分钟。 但99%的时间非常缓慢,疯狂的高负荷通常至less有4在100年。 我们没有使用这个问题,这个服务器曾经能够处理400个并发用户和1000个页面/分钟而没有负载超过1.5。
我做的第一件事是用ADOdb在PHP中实现数据库caching。 这有一点帮助,但没有解决问题。
我已经看遍了互联网,似乎无法找出什么是错的。 我问一个朋友看看,他没有任何线索。 我让我的主机把我们切换到一台新机器,几个小时后也出现同样的问题。 我们不应该得到这么高的负载,我们正在获得的stream量。
我开始认为它可能与/ tmp有关。 运行'tmpwatch –mtime –all 1 / tmp'后,我能够使负载恢复正常。 然而,负载刺激后,这再次无法工作。
如果有人有什么错误的想法,我将不胜感激。 我不确定你可能会用什么作为衡量指标,但是我包含了一些我认为可能有用的指标。
'top'输出:
top - 22:02:36 up 1 day, 23:39, 1 user, load average: 4.01, 4.38, 4.50 Tasks: 233 total, 1 running, 231 sleeping, 0 stopped, 1 zombie Cpu(s): 25.5%us, 2.0%sy, 0.0%ni, 70.5%id, 2.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 16331836k total, 16034868k used, 296968k free, 375472k buffers Swap: 18546680k total, 0k used, 18546680k free, 14421512k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 31149 mysql 20 0 1589m 32m 6024 S 191.0 0.2 5:54.80 mysqld 27575 apache 20 0 312m 13m 3464 S 2.7 0.1 0:04.06 httpd 29427 apache 20 0 317m 18m 3484 S 2.7 0.1 0:02.76 httpd 25331 apache 20 0 311m 12m 3440 S 2.3 0.1 0:05.55 httpd 21331 apache 20 0 408m 15m 3676 S 2.0 0.1 0:08.57 httpd 24226 apache 20 0 314m 14m 3484 S 2.0 0.1 0:06.45 httpd 32352 apache 20 0 311m 12m 3424 S 2.0 0.1 0:01.01 httpd 32377 apache 20 0 312m 13m 3484 S 2.0 0.1 0:00.86 httpd 774 apache 20 0 312m 12m 3108 S 1.7 0.1 0:00.11 httpd 28165 apache 20 0 406m 12m 3588 S 1.7 0.1 0:03.76 httpd 30516 apache 20 0 311m 12m 3476 S 1.7 0.1 0:02.04 httpd 31019 apache 20 0 313m 13m 3436 S 1.7 0.1 0:01.68 httpd 31020 apache 20 0 314m 15m 3484 S 1.7 0.1 0:01.71 httpd 657 apache 20 0 311m 12m 3108 S 1.3 0.1 0:00.20 httpd 27731 apache 20 0 406m 12m 3572 S 1.3 0.1 0:03.69 httpd 28180 apache 20 0 313m 13m 3480 S 1.3 0.1 0:03.43 httpd 30565 apache 20 0 314m 14m 3488 S 1.3 0.1 0:02.07 httpd
'df'输出
Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg-root 461164576 45283168 392455568 11% / tmpfs 8165916 0 8165916 0% /dev/shm /dev/sda1 247919 72922 162197 32% /boot /dev/mapper/vg-tmp 1032088 137344 842316 15% /tmp
'iostat'输出
Linux 2.6.32-220.el6.x86_64 (domain redacted) 09/05/2012 _x86_64_ (8 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 4.88 0.00 0.49 1.53 0.00 93.09 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 18.03 98.46 787.86 17060770 136515216 dm-0 76.33 98.15 605.19 17006740 104862680 dm-1 0.00 0.02 0.00 3176 0 dm-2 22.78 0.21 182.06 35730 31546312
有两个地方可以开始诊断:
检查MySQL是否需要调整; mysqltuner是一个很好的自动化工具来检查你的configuration(包括实时统计)对推荐的configuration。
当性能低下时,查看/tmp有多less文件,以及它是哪个文件系统 – 以及目录是多么“大”。 如果它超大,或有大量的文件,你可能会从tmpfs ,这应该是一个快一点的好处。 (…或避免太多的文件在那里:)
最可能的出发点是找出你的生产负载是否导致MySQLtuner的任何调整问题。