我有一个有很多访问者的论坛,有时访问者数量没有增加,负载增加到 40。从下面的输出中可以看出,等待时间很长(57%)。我如何找到原因?
服务器软件是 Apache、MySQL 和 PHP。
root@server:~# top
top - 13:22:08 up 283 days, 22:06, 1 user, load average: 13.84, 24.75, 22.79
Tasks: 333 total, 1 running, 331 sleeping, 0 stopped, 1 zombie
Cpu(s): 20.6%us, 7.9%sy, 0.0%ni, 13.4%id, 57.1%wa, 0.1%hi, 0.9%si, 0.0%st
Mem: 4053180k total, 3868680k used, 184500k free, 136380k buffers
Swap: 9936160k total, 12144k used, 9924016k free, 2166552k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23930 mysql 20 0 549m 122m 6580 S 90 3.1 4449:04 mysqld
17422 www-data 20 0 223m 20m 10m S 2 0.5 0:00.21 apache2
17555 www-data 20 0 222m 19m 9968 S 2 0.5 0:00.13 apache2
17264 www-data 20 0 225m 19m 8972 S 1 0.5 0:00.17 apache2
17251 www-data 20 0 220m 12m 4912 S 1 0.3 0:00.12 apache2
Run Code Online (Sandbox Code Playgroud)
.
root@server:~# top
top - 13:39:59 up 283 days, 22:24, 1 user, load average: 6.66, 10.39, 13.95
Tasks: 318 total, 1 running, 317 sleeping, 0 stopped, 0 zombie
Cpu(s): 13.6%us, 4.2%sy, 0.0%ni, 40.5%id, 40.6%wa, 0.2%hi, 0.8%si, 0.0%st
Mem: 4053180k total, 4010992k used, 42188k free, 119544k buffers
Swap: 9936160k total, 12160k used, 9924000k free, 2290716k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23930 mysql 20 0 549m 122m 6580 S 44 3.1 4457:30 mysqld
19946 www-data 20 0 223m 21m 10m S 5 0.6 0:00.77 apache2
17316 www-data 20 0 226m 23m 11m S 1 0.6 0:01.76 apache2
17333 www-data 20 0 222m 21m 11m S 1 0.5 0:01.55 apache2
18212 www-data 20 0 225m 22m 11m S 1 0.6 0:01.58 apache2
19528 www-data 20 0 220m 13m 5480 S 1 0.3 0:00.63 apache2
19600 www-data 20 0 224m 20m 11m S 1 0.5 0:00.73 apache2
19942 www-data 20 0 225m 21m 10m S 1 0.5 0:00.82 apache2
20232 www-data 20 0 222m 16m 8760 S 1 0.4 0:00.65 apache2
20243 www-data 20 0 223m 21m 11m S 1 0.5 0:00.57 apache2
20299 www-data 20 0 225m 20m 9m S 1 0.5 0:00.67 apache2
20441 www-data 20 0 225m 21m 10m S 1 0.5 0:00.57 apache2
21201 www-data 20 0 220m 12m 5148 S 1 0.3 0:00.19 apache2
21362 www-data 20 0 220m 12m 5032 S 1 0.3 0:00.17 apache2
21364 www-data 20 0 220m 12m 4916 S 1 0.3 0:00.14 apache2
21366 www-data 20 0 220m 12m 5124 S 1 0.3 0:00.22 apache2
21373 www-data 20 0 222m 14m 7060 S 1 0.4 0:00.26 apache2
Run Code Online (Sandbox Code Playgroud)
vdb*_*oor 38
以下是一些查找磁盘活动的工具:
iotopvmstat 1iostat 1lsofstrace -e trace=open <application>strace -e trace=open -p <pid>在ps auxf你还可以看到哪些流程是在不间断磁盘睡眠(D),因为它们正在等待I / O。
有些日子,负载增加到 40 个,而访客数量却没有增加。
您可能还想创建一个备份,看看硬盘驱动器是否缓慢出现故障。硬盘驱动器通常会在停止运行之前开始减速。这也可以解释高负载。
top 的输出表明 DBMS 正在经历大部分 I/O 等待,因此数据库调优问题显然是需要调查的候选对象。
在数据库服务器上等待的 I/O - 特别是在负载高峰时 - 是您的 DBMS 可能受磁盘限制(即您需要更快的磁盘子系统)或可能存在调整问题的线索。您可能还应该研究分析您的数据库服务器 - 即跟踪它正在做什么以及哪些查询花费了时间。
诊断数据库调优问题的一些起点:-
找出占用时间最多的查询,查看查询计划。查看是否有奇怪的查询计划,例如不应该出现的表扫描。也许数据库需要添加索引。
较长的资源等待时间可能意味着某些关键资源池需要扩展。
长 I/O 等待时间可能意味着您需要更快的磁盘子系统。
您的日志和数据卷是否位于不同的驱动器上?数据库日志有很多小的顺序写入(本质上它们的行为就像一个环形缓冲区)。如果您有一个繁忙的随机访问工作负载与您的日志共享相同的磁盘,这将不成比例地影响日志记录的吞吐量。对于提交日志条目的数据库事务,必须将日志条目写出到磁盘,因此这将成为整个系统的瓶颈。
请注意,某些 MySQL 存储引擎不使用日志,因此在您的情况下这可能不是问题。
脚注:排队系统
随着系统接近饱和,排队系统(吞吐量的统计模型)变得双曲线变慢。对于高级近似,50% 饱和的系统的平均队列长度为 2。 90% 饱和的系统的队列长度为 10,饱和 99% 的系统的队列长度为 100。
因此,在接近饱和的系统上,负载的微小变化可能会导致等待时间的巨大变化,在这种情况下,表现为等待 I/O 的时间。如果磁盘子系统的 I/O 容量接近饱和,那么负载的微小变化可能会导致响应时间的显着变化。
| 归档时间: |
|
| 查看次数: |
127429 次 |
| 最近记录: |