1. 程式人生 > >使用ls / 命令卡死,或者df -h 查看卡死解決辦法

使用ls / 命令卡死,或者df -h 查看卡死解決辦法

strace ls

問題:

今天公司一臺服務器 執行 ls / 命令時,系統卡死, ctrl+c 也不能結束,如下:

    root@pts/23 # ls /
    ^C

此問題一般都是因為mount 對端服務失效,本地目錄卡死造成

解決思路:

1. strace 命令跟蹤,定位問題

首先使用 命令跟蹤, 查看執行到哪一步卡死:

    root@pts/26 # strace  ls /
    ....
    ...
    ..
    lgetxattr("/MegaSAS.log", "system.posix_acl_default", 0x0, 0) = -1 ENODATA (No data available)
    lstat("/net", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
    lgetxattr("/net", "security.selinux", 0x258f850, 255) = -1 EOPNOTSUPP (Operation not supported)
    lstat("/net", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
    lgetxattr("/net", "system.posix_acl_access", 0x0, 0) = -1 EOPNOTSUPP (Operation not supported)
    lstat("/chaichuan_test", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
    lgetxattr("/chaichuan_test", "security.selinux", 0x258f850, 255) = -1 ENODATA (No data available)
    lstat("/chaichuan_test", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
    lgetxattr("/chaichuan_test", "system.posix_acl_access", 0x0, 0) = -1 ENODATA (No data available)
    lgetxattr("/chaichuan_test", "system.posix_acl_default", 0x0, 0) = -1 ENODATA (No data available)
    lstat("/mnt", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
    lgetxattr("/mnt",

可以看到,命令執行到 /mnt這個目錄時,停止不動了

也可以使用cat /proc/mounts 查看當前mount狀態,發現確實有對mnt目錄的記錄

root@pts/31 # cat /proc/mounts 
    ...
    192.168.10.150:/opt/ /mnt nfs4 ....

2. fuser 查看問題目錄進程

問題定位/mnt目錄,使用fuser 查看此目錄占用進程

root@pts/30 # fuser -m /mnt
無法獲取 /proc/4110/fd/255 的文件狀態: 失效文件句柄
無法獲取 /proc/9492/fd/255 的文件狀態: 失效文件句柄
無法獲取 /proc/29965/fd/255 的文件狀態: 失效文件句柄

3.kill 解決

找到進程號直接kill

root@pts/30 # kill -9 4110

root@pts/30 # kill -9 9492

root@pts/30 # kill -9 29965

問題解決

總結:

strace命令是一個集診斷、調試、統計與一體的工具,我們可以使用strace對應用的系統調用和信號傳遞的跟蹤結果來對應用進行分析,以達到解決問題或者是了解應用工作過程的目的, 具體使用可以查看幫助.

使用ls / 命令卡死,或者df -h 查看卡死解決辦法