以下场景是一个典型的由于写log导致IO问题的场景。
注:我的测试环境是1c2g内存的虚拟机,所以无法模拟案例,案例的需求是2c8g,所以这里只罗列除了排查思路。
准备工作
1 | docker run -v /tmp:/tmp --name=app -itd feisky/logapp |
启动后发现系统响应变慢
1 | # 按1切换到每个CPU的使用情况 |
- cpu0 的wa已经到了92.7
- pyhton占了6.3的是你用率
内存的buff/cache占了6个g
综上觉得是io的问题,pyhton这个进程导致的,内存的占用有可能是因为大量的io读写文件导致的
用iostat查看下io的情况
1 | # -d表示显示I/O性能指标,-x表示显示扩展统计(即所有I/O指标) |
系统sda的写到了32mb每秒,w_waite到了7s,私用率几乎100%,进一步印证了才想
下面我们该用pidstat查看具体时间那个进程导致的了,这里看到是18904-python导致的
1 | $ pidstat -d 1 |
strace -p pid来查看源码,发现程序会给句柄为3的文件写入300mb的数据,stat(“/tmp/logtest.txt.1”,找到了文件所在
1 | $ strace -p 18940 |
我们可以用lsof -p进一步印证是哪些文件
1 |
|