之前排查nas访问慢问题,最近这又出现。这次和先前稍有不一样,但排查步骤几乎一样。https://blog.51cto.com/chier11/5204916 之前排查过程。
整体步骤
以下情况暂适用于单台主机执行nas访问慢的情况。
1、查看nas流量:监控中nas设备端口流量明显增高;
2、查看物理主机流量:对应的端口流量监控;
经过1、2步排查,可以初步锁定某台主机突发大流量写入导致,下面进入系统内部排查
3、查看系统负载、队列写入情况,判断当前是否有io等待;top(已存在)
4、查看nas对应的io读写情况,判断是否有高io引起的nas读写慢:atop(已存在)。iostat只能看到本地的磁盘的io,包括多路径存储。但nas或nfs等网络共享过来的磁盘目前只能通过atop查看(atop后找到对应的信息)。
5、查看当前所有io进程,确定当前高io读写的进程信息:iotop(已存在)
6、跟踪相应的进程信息锁定某个进程触发高会话读写;strace(已存在),操作系统版本低有些命令不适用,需要提前安装相应命令比如pstrace(centos或redhat7以上有这个命令,且message有kernel报错,但以下没有这个命令)
7、后续:系统排查定位到进程需要尝试结束或重启进程,或重新挂载nas解决。但应用引起问题需要排查为何突然大流量访问,如果属于正常业务需要考虑长时间平衡流量去访问,杜绝短时间大流量访问引起队列等待io读写高等情况。
定位现象
1、top查看系统负载【20%--30%】、wa值【30%左右】。发现IO的wa值较高。
2、因io读写较高,所以需要查io的情况。 iostat -d -x -k 1 10
3、因nas共享过来,系统执行mount过来的,因此通过iostat看不到网络设备的io运行情况。但依然可以通过iotop命令去查看当前设备的进程占用io情况。
df -h (该显示nas挂载点时会卡。或者cd到nas挂载点会更卡)
iotop
有关jbd2的优化或处理此处不再描述
4、建议通过atop命令去查看nas情况,atop需要提前安装。按【d】进入磁盘模式
下图可以看到nas行,对应的write比价高。
5、查看message日志,无kernel报错信息。
在centos或redhat7以上的版本的message信息中有kernel报错,但在以下版本看不到kernel信息报错。包括一些命令pstack等不存在。
经过以上多方面排查,可以确定为系统对nas进行读写导致高io出现队列等待、进入nas挂载目录卡、df -h显示nas挂载慢等情况,从而引起业务中断。以下是如何排查定位对应的进程和报错。
排查过程
1、iotop 定位那个进程导致nas读写持续高。
2、strace df -h 跟踪df过程
3、pstack定位【centos或redhat7(含)以上有该命令】。pstack可显示每个进程的栈跟踪。pstack必须由相应进程的属主或 root 运行。可以使用 pstack 来确定进程挂起的位置。此命令允许使用的唯一选项是要检查的进程的 PID。
pstree命令安装: yum -y install psmisc
pstree -p root | grep ssh 或pstree -up
又例如NetworkManger服务:
pstack <PID>
4、查询该进程下每个操作运行时间: ps -eLo pid,lwp,pcpu | grep <PID>
5、查询当前目录或挂载点访问情况 lsof +D <目录名> -r 1 需要具备目录名。
另一个查看文件动态操作的命令inotifywait 暂时用不到
inotifywait -mrq -e 'create,delete,close_write,attrib,moved_to' --timefmt '%Y-%m-%d %H:%M' --format '%T %f %e' <目录名>
##/usr/local/inotify/bin/inotifywait -mrq -e 'create,delete,close_write,attrib,moved_to' --timefmt '%Y-%m-%d %H:%M' --format '%T %f %e' /root/testd/
2022-08-27 17:34 text.txt CREATE
2022-08-27 17:34 text.txt CLOSE_WRITE,CLOSE
2022-08-27 17:34 ttt.t MOVED_TO
2022-08-27 17:35 bb DELETE
后续待补充……