使用ls / 命令卡死,或者df -h 查看卡死解決辦法
阿新 • • 發佈:2018-04-16
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 查看卡死解決辦法