老婆出轨 发表于 2024-6-9 15:35:01

linux服务器维护load average、wait、IO中kswapd0过高以及使用iostat和ioto

一、服务器load average很高,wait接近100%,IO中kswapd0接近100%的题目

    昨天在服务器上安装了jenkins,但每次启动不多久就发现jenkins自动挂了,非常烦闷。厥后才发现服务器的load average已经很高,基本都在1(单核CPU),而每次jenkins一启动后,load average一路上升,基本到达4了。而CPU中数据表现wait等待输入输出的CPU时间百分比基本在98%。如下图:
https://img-blog.csdnimg.cn/img_convert/7501af02f24d3a6b1c8d9f3914ed2e3a.png
    图中可看出,CPU的使用率并不高,说明不是CPU的瓶颈,wait值很大,说明内存与硬盘之间的数据输入输出很多在等待,推测是IO很大,通过iotop检察IO的情况如下:
https://img-blog.csdnimg.cn/img_convert/b431e0513c6c2991dd45b921968fed1d.png
    IO情况中可以看到:kswapd0占比快达到100%,kswapd0为何物呢?
   Linux uses kswapd for virtual memory management such that pages that have been recently accessed are kept in memory and less active pages are paged out to disk.(what is a page?)…Linux uses manages memory in units called pages.So,the kswapd process regularly decreases the ages of unreferenced pages…and at the end they are paged out(moved out) to disk。
    kswapd0是虚拟内存管理中,负责换页的,操纵系统每过肯定时间就会唤醒kswapd ,看看内存是否告急,如果不告急,则睡眠,在 kswapd 中,有2 个阀值,pages_hige 和 pages_low,当空闲内存页的数量低于 pages_low 的时候,kswapd进程就会扫描内存并且每次开释出32 个free pages,直到 free page 的数量到达pages_high。
    可见kswapd0这么忙,是内存出现了题目,可top命令里表现内存还剩余了几百M。不可能出现这样的情况啊,突然一想到前两天我想测试服务器的内存阀值的事变,可能是由于内存阀值设置太高,而kswapd0以为内存阀值里的内存不能使用,于是启动起来频繁扫描内存并开释,从而占用了大量的IO。我之前把服务器的内存阀值改成了500M:命令检察,
    cat /proc/sys/vm/min_free_kbytes   表现:524288,于是立纵然用命令:
# echo 51200 > /proc/sys/vm/min_free_kbytes    
# cat /proc/sys/vm/min_free_kbytes         
51200     然后开始观察load average和cpu wait数量,果不其然都在开始下降,由此可见,kswapd0是当可用内存不足时便启动,并且这个可用内存是free中的可用内存减掉 /proc/sys/vm/min_free_kbytes 设置值后的数据,同时/proc/sys/vm/min_free_kbytes 值也不能设置太高。调个几百M即可(视物理内存巨细而定)。
publish:July 18, 2016 -Monday
二、linux下wa过高时使用iostat和iotop命令排查缘故原由

    linux下wa过高时表现,表现I/O等待时间所占CPU时间的比重很高,wa即wait的时间。之前有过一篇相干的文章,不过那时未提及iostat,先制作一个wa非常高的现场吧。把内存阈值设置得比较大,比如内存的50%,这个固然视你的服务器当前情况而定。命令:echo 524200 > /proc/sys/vm/min_free_kbytes 实行完后我服务器的IO就上到91了(内存1G)。截图如下:
https://img-blog.csdnimg.cn/img_convert/abc5897814930af5021ed94fced8c449.png
    当面临这样一个高烧的服务器时,首先要查抄的就是机器是否正在大量使用交换空间,由于硬盘操纵的速度远远低于RAM,当系统内存耗尽,开始使用交换空间(使用swap性能会受到严重影响)。如果尚有大量可用的内存,则必要明白谁人进程占用了大部分I/O操纵。
    第一:使用iostat排查是在哪个分区上举行了大量的I/O操纵

    安装iostat:不能使用yum install iostat.由于包名不是叫iostat,而是sysstat。介绍:sysstat.x86_64 : The sar and iostat system monitoring commands。通过yum install sysstat安装完成之后。使用iostat检察如下:
# iostat
Linux 2.6.32-431.23.3.el6.x86_64 (kermit)       10/28/2016      _x86_64_      (1 CPU)

avg-cpu:%user   %nice %system %iowait%steal   %idle
         0.54    0.00    0.18    0.34    0.00   98.94

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
xvda            2.70      18.20      37.59 1064816412 2199369704     由于服务器只有一个分区,以是就只看到这个分区的IO操纵特殊高,如果分区很多。而通过此命令发现某个分区IO特殊高时,可以再使用df检察这个分区挂载了哪些文件,从而排查哪些地方在操纵这些文件。比如一直在往那里写日志。iostat命令后面带上数字参数表现隔几秒刷新一次。上面的结果中几个比较重要的数据意义:
   avg-cpu:
%user: 在用户级别运行所使用的CPU的百分比
%nice: nice操纵所使用的CPU的百分比
%system: 在系统级别(kernel)运行所使用CPU的百分比
%iowait: CPU等待硬件I/O时,所占用CPU百分比
%idle: CPU空闲时间的百分比
Device:
sda:装备名
tps: 每秒钟发送到的I/O请求数.
Blk_read /s: 每秒读取的数据量
Blk_wrtn/s: 每秒写入的数据量.
Blk_read:   读入的总的数据量
Blk_wrtn:  写入的总的数据量
    第二:可以使用iotop检察哪个进程的IO最高。

    同样也以yum方式安装iotop: yum search iotop。我之前安装了iotop,此次启动时碰到题目:No module named iotop.ui To run an uninstalled copy of iotop, launch iotop.py in the top directory,此错误是由于python的版本题目。我原centos下是python2.6版本,厥后升级安装了python2.7版本,而iotop是在python2.6版本时安装的(yum安装的库就会在python2.6下),并且已经重新更新了/usr/sbin/python的软链接,而在/usr/sbin/iotop命令文件中使用的是:#!/usr/bin/python (第一行),直接导致此错误。解决起来也简单,修改/usr/sbin/python的第一行:
https://img-blog.csdnimg.cn/img_convert/398139f13d6378826754a8a564414343.png
    完成之后开始使用iotop,iotop和top命令有点类似,都通过-d参数指定刷新秒数,实行命令:iotop -d 5 默认结果会按照我们想要的以IO排序,结果如下图:
https://img-blog.csdnimg.cn/img_convert/4575b062ec4b2f60d8c8c32a36234a83.png
    此时我们能看到kswapd0的IO操纵最高,iotop命令支持键盘快捷键:左右箭头改变排序方式,默认是按IO排序,r键是反向排序,o键是只表现有IO输出的进程,和top一样以q键退出。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: linux服务器维护load average、wait、IO中kswapd0过高以及使用iostat和ioto