LINUX 性能调优--IO案例

操作系统 Ubuntu 18.04
机器配置:2 CPU,4GB 内存
案例使用的语言是 go
源代码在github上:https://github.com/jaimeyang/perform_test/tree/master/io/write
1 启动 go程序:
go run main.go
2 按照一般的思路,先观察以下top的输出
在这里插入图片描述
发现wa 已经到了98.6的数值了,可以先暂时推测出是IO密集型的应用在捣乱。
那么是哪个进程呢?
发现top输出的CPU使用率里面,名为main的使用率是最高的,可以作为嫌疑人尝试一下。
记下进程号2848.
3 在看看内存,发现总共4G的内存,现在只有1.6G,都用在了buff/cache上面了。说明内存被缓存使用了,但是到底是谁使用的呢,也必须了解一下。
4 从第一步发现的情况可以推测出是IO的问题,那么可以先观测一下IO的情况。
通过工具iostat观测IO
iostat -x -d 1
在这里插入图片描述
观察 iostat 的最后一列,你会看到,磁盘 sda 的 I/O 使用率已经高达 100%,已经 I/O 饱和。再看前面的各个指标,每秒写磁盘请求数是 45 ,写大小是 43 MB,写请求的响应时间为 3秒,而请求队列长度则达到了 152。
从这里可以确定是IO出现问题了。
那么是哪个进程写导致的?
5 通过工具pidstat 可以确定是哪个进程在大量的进行IO写。
pidstat -d 1
在这里插入图片描述
很明显就看出main进程写的速率达到了41M每秒。可以确定是main进程的问题了。
6 读写文件必须通过系统调用完成。观察系统调用情况,就可以知道进程正在写的文件。这时就用到了工具strace。
strace -p 2848
在这里插入图片描述
从 write() 系统调用上,我们可以看到,进程向文件描述符编号为 3 的文件中,写入了 300MB 的数据。看来,它应该是我们要找的文件。不过,write() 调用中只能看到文件的描述符编号,文件名和路径还是未知的.
7 这里,在来一个新的工具 lsof。它专门用来查看进程打开文件列表,不过,这里的“文件”不只有普通文件,还包括了目录、块设备、动态库、网络套接字等。
lsof -p 2848
在这里插入图片描述
可以看出该进程打开了一个/home/jaime/wrie/write/log.log文件,并且文件是读取/写入模式。
可以推测出该进程在以每秒32MB的速度在写文件。
通过查看源代码确定了是该问题。最后可以根据业务的需要,修改源代码的方式解决这个问题。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值