Linux运维22:应用或命令卡住问题跟踪方法

Posted YoungerChina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维22:应用或命令卡住问题跟踪方法相关的知识,希望对你有一定的参考价值。

        在Linux系统使用过程中,可能由于某种原因导致某个应用或者命令卡住,并处于D+状态。对于这种问题,要进行初步定为和分析,为后面的研发人员分析和解决问题,提供帮助。本文将将此类问题的排查的方法和思路分享给各位,希望对您有所帮助。

1. 问题描述:

        命令行执行“df -h”卡住,无法退出,如下图:

2. 问题跟踪:

1. 查看线程状态

         当前df线程(pid=2468)处于D+状态,即不可打断的睡眠状态,所以是无法杀死的。

2. 查看问题线程堆栈cat /proc/<pid>/stack

[root@devvm ~]# cat /proc/2468/stack 
[<ffffffffc09bafe4>] rpc_wait_bit_killable+0x24/0xb0 [sunrpc]
[<ffffffffc09bd284>] __rpc_execute+0x154/0x420 [sunrpc]
[<ffffffffc09bfa48>] rpc_execute+0x68/0xc0 [sunrpc]
[<ffffffffc09ae7e6>] rpc_run_task+0xf6/0x150 [sunrpc]
[<ffffffffc09ae950>] rpc_call_sync+0x50/0xc0 [sunrpc]
[<ffffffffc0b0c72e>] nfs3_rpc_wrapper.constprop.11+0x6e/0xb0 [nfsv3]
[<ffffffffc0b0d406>] nfs3_proc_getattr+0x56/0xb0 [nfsv3]
[<ffffffffc0a336e8>] __nfs_revalidate_inode+0xd8/0x350 [nfs]
[<ffffffffc0a33d45>] nfs_getattr+0x95/0x250 [nfs]
[<ffffffffbde534a9>] vfs_getattr+0x49/0x80
[<ffffffffbde535d5>] vfs_fstatat+0x75/0xc0
[<ffffffffbde5397e>] SYSC_newstat+0x2e/0x60
[<ffffffffbde53e3e>] SyS_newstat+0xe/0x10
[<ffffffffbe393f92>] system_call_fastpath+0x25/0x2a
[<ffffffffffffffff>] 0xffffffffffffffff
[root@devvm ~]# 

        df线程明显是卡在等待nfs的rpc答复过程中。

3. 通过mount查看系统挂载的nfs共享目录

        说明,此时只能通过mount命令查看,df会卡住。

         检查与nfs服务器的网络连通性如何。

 由此可知,是网络导致df获取nfs共享目录状态时卡住。

3. 解决问题

1. 修复网络

     通过网络运维等手段,修复网络,使之连通性恢复正常


 2. 查看df结果

        df线程恢复正常,并返回结果 

所有线程或命令卡住的追踪思路大致均如此。

以上是关于Linux运维22:应用或命令卡住问题跟踪方法的主要内容,如果未能解决你的问题,请参考以下文章

Linux运维21:服务器内存过高跟踪思路

Linux运维21:服务器内存过高跟踪思路

4种方法实时监控Linux日志文件

自动化运维 / 智能化运维精选文章文档 22 篇 | 周末送资料

Linux运维之top命令解析

Linux运维之top命令解析