æç« ç¿»è¯èª Peeking into Linux kernel-land using /proc filesystem for quickânâdirty troubleshooting
è¿ç¯å客çå 容å®å ¨æ¯å ³äºç°ä»£Linuxå æ ¸çãæ¢å¥è¯è¯´ï¼æçæ¯ä¸RHEL6䏿 ·ä½¿ç¨ç2.6.3xç³»åå æ ¸ï¼è䏿¯å¤èçRHEL5æä½¿ç¨ç2.6.18å æ ¸ï¼é½ä»ä¹é¬¼äºï¼ï¼ï¼ï¼è½ç¶å¤§é¨åä¼ä¸é½è¿å¨ä½¿ç¨RHEL5ãå¦å¤ï¼è¿ç¯æç« ä¹ä¸ä¼æ¶åå æ ¸è°è¯å¨æè SystemTapèæ¬ä¹ç±»çä¸è¥¿ï¼å®å ¨æ¯ææç®åå°å¨æç¨çprocæä»¶ç³»ç»èç¹ä¸æ§è¡âcat /proc/PID/xyzâè¿æ ·çå½ä»¤ã
å®ä½ä¸ä¸ªç¨åºâè¿è¡ç¼æ ¢âçé®é¢
ä¸é¢è¦ä¸¾çè¿ä¸ªä¾åæ¯è¿æ ·çï¼ä¸ä¸ªDBAåæ è¯´ä»ä»¬çfindå½ä»¤ä¸ç´è¿è¡ç¼æ ¢ï¼å天齿²¡æä»ä¹è¾åºï¼ä»ä»¬æ³ç¥éè¿æ¯ä¸ºä»ä¹ãå¬å°è¿ä¸ªé®é¢çæ¶åæå°±å¤§æ¦æç´è§é æè¿ä¸ªé®é¢çåå ï¼ä½æ¯ä»ä»¬è¿æ¯æ³ç¥éæä¹ç³»ç»å°è¿½è¸ªè¿ç±»é®é¢ï¼å¹¶æ¾å°è§£å³æ¹æ¡ãå好åºé®é¢çç°åºè¿å¨â¦â¦
è¿å¥½ï¼ç³»ç»æ¯è¿è¡å¨OEL6ä¸çï¼å æ ¸æ¯è¾æ°ï¼ç¡®åå°è¯´æ¯2.6.39 UEK2ã
é¦å ï¼è®©æä»¬ççfindè¿ç¨æ¯å¦è¿å¨ï¼
[root@oel6 ~]# ps -ef | grep find
root 27288 27245 4 11:57 pts/0 00:00:01 find . -type f
root 27334 27315 0 11:57 pts/1 00:00:00 grep find
è·ç好好çï¼PIDæ¯27288ï¼è¯·è®°å¥½è¿ä¸ªå°ä¼ä¼´éæ´ç¯åå®¢çæ°åï¼ã
é£ä¹ï¼æä»¬å°±ä»æåºç¡çå¼å§åæå®çç¶é¢ï¼å¦æå®ä¸æ¯è¢«ä»ä¹æä½å¡ä½äºï¼ä¾å¦ä»cacheä¸å è½½å®æéè¦çå
容ï¼ï¼å®åºè¯¥æ¯100%çCPUå ç¨çï¼å¦æå®çç¶é¢å¨IOæè
èµæºç«äºï¼é£ä¹å®åºè¯¥æ¯å¾ä½çCPUå ç¨çï¼æè
æ¯%0ã
æä»¬å
çä¸topï¼
[root@oel6 ~]# top -cbp 27288
top - 11:58:15 up 7 days, 3:38, 2 users, load average: 1.21, 0.65, 0.47
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2026460k total, 1935780k used, 90680k free, 64416k buffers
Swap: 4128764k total, 251004k used, 3877760k free, 662280k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27288 root 20 0 109m 1160 844 D 0.0 0.1 0:01.11 find . -type f
ç»æå¾æ¸
æ¥ï¼è¿ä¸ªè¿ç¨çCPUå ç¨çå¾ä½ï¼å ä¹ä¸ºé¶ã使¯CPUå ç¨ä½ä¹åæ
åµï¼ä¸ç§æ¯è¿ç¨å®å
¨å¡ä½äºï¼æ ¹æ¬æ²¡ææºä¼è·å¾æ¶é´çï¼å¦ä¸ç§æ¯è¿ç¨å¨ä¸åè¿å
¥çå¾
çç¶æï¼ä¾å¦pollå¨ä½å°±æ¯æ¶ä¸æ¶è¶
æ¶åï¼è¿ç¨è¿å
¥ä¼ç ç¶æï¼ãè½ç¶è¿å©ä¸çç»ètopè¿ä¸è¶³ä»¥å®å
¨ç»æä»¬å±ç¤ºï¼ä½æ¯è³å°æä»¬ç¥éäºè¿ä¸ªè¿ç¨æ²¡æå¨ç§CPUæ¶é´ã
é常æ
åµä¸ï¼å¦æè¿ç¨å¤äºè¿ç§ç¶æï¼%0çCPUå ç¨ä¸è¬è¯´æè¿ç¨æ¯å¡å¨äºæä¸ªç³»ç»è°ç¨ï¼å 为è¿ä¸ªç³»ç»è°ç¨é»å¡äºï¼å
æ ¸éè¦æè¿ç¨æ¾å°ä¼ç ç¶æï¼ï¼æé½ä¼ç¨straceè·è¸ªä¸ä¸è¿ä¸ªè¿ç¨å
·ä½å¡å¨äºåªä¸ªç³»ç»è°ç¨ãèä¸ï¼å¦æè¿ç¨ä¸æ¯å®å
¨å¡ä½äºï¼é£è¿ç¨ä¸çç³»ç»è°ç¨æ
åµä¹ä¼å¨straceçè¾åºä¸ææå±ç¤ºï¼å 为ä¸è¬é»å¡çç³»ç»è°ç¨ä¼å¨è¶
æ¶è¿ååï¼è¿ä¸æ®µæ¶é´åè¿å
¥é»å¡çå¾
çç¶æï¼ã
让æä»¬è¯è¯straceï¼
[root@oel6 ~]# strace -cp 27288
Process 27288 attached - interrupt to quit
[1]+ Stopped strace -cp 27288
[root@oel6 ~]# kill -9 %%
[1]+ Stopped strace -cp 27288
[root@oel6 ~]#
[1]+ Killed strace -cp 27288
å°´å°¬ï¼straceèªå·±ä¹å¡ä½äºï¼å天没æè¾åºï¼ä¹ä¸ååºCtrl-Cï¼æä¸å¾ä¸éè¿Ctrl-Zæå®æå°åå°åææå®ãæ³ç®åå¤çè¿çæ¯ä¸å®¹æåã
é£åªå¥½åè¯è¯pstackäºï¼Linuxä¸çpstackåªæ¯ç¨shellèæ¬å
äºä¸ä¸GDBï¼ã尽管pstackçä¸å°å
æ ¸æçå
容ï¼ä½æ¯è³å°å®è½åè¯æä»¬æ¯åªä¸ªç³»ç»è°ç¨æåæ§è¡çï¼é常pstackè¾åºçç¨æ·æè°ç¨æ æé¡¶é¨æ¯ä¸ä¸ªlibcåºçç³»ç»è°ç¨ï¼ï¼
[root@oel6 ~]# pstack 27288
[1]+ Stopped pstack 27288
[root@oel6 ~]# kill %%
[1]+ Stopped pstack 27288
[root@oel6 ~]#
[1]+ Terminated pstack 27288
åµåµï¼pstackä¹å¡ä½äºï¼ä»ä¹è¾åºé½æ²¡æï¼
è³æ¤ï¼æä»¬è¿æ¯ä¸ç¥éæä»¬çç¨åºæ¯æä¹å¡ä½äºï¼å¡å¨åªéäºã
好å§ï¼è¿æä¹è¿è¡ä¸å»å¢ï¼è¿æä¸äºå¸¸ç¨çä¿¡æ¯å¯ä»¥æéââè¿ç¨çstatusåæ®µåWCHANåæ®µï¼è¿äºä½¿ç¨å¤èçpså°±è½æ¥çï¼æè®¸æå¼å§å°±åºè¯¥ç¨psççè¿ä¸ªè¿ç¨æ¯ä¸æ¯å·²ç»æåµå°¸è¿ç¨äºï¼ï¼
[root@oel6 ~]# ps -flp 27288
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 D root 27288 27245 0 80 0 - 28070 rpc_wa 11:57 pts/0 00:00:01 find . -type f
éè¦æ³¨æçæ¯ï¼ä½ è¦å¤è¿è¡å 次ps以确ä¿è¿ç¨è¿å¨åä¸ä¸ªç¶æï¼ä¸ç¶å¨ä¸åå·§çæ¶åè·åäºä¸ä¸ªé误çç¶æå°±éº»ç¦äºï¼ï¼æè¿é为äºç®çå°±åªè´´ä¸æ¬¡è¾åºäºã
è¿ç¨æ¤æ¶æ£å¤äºDç¶æï¼æç
§manæåç说æ³ï¼è¿é常æ¯å 为ç£çIO导è´çãèWCHANåæ®µï¼è¡¨ç¤ºå¯¼è´ç¨åºå¤äºä¼ç /çå¾
ç¶æç彿°è°ç¨ï¼åæç¹å¿è¢«åæäºãæ¾ç¶æå¯ä»¥ç¿»ä¸ä¸psçmanæåï¼ççæä¹æè¿ä¸ªå段è°å®½ä¸ç¹å¥½å®æ´æå°åºæ¥ï¼ä¸è¿æ¢ç¶æé½ç¥éäºè¿ä¸ªä¿¡æ¯æ¥èªäºprocæä»¶ç³»ç»ï¼å°±æ²¡è¿ä¸ªå¿
è¦äºã
ç´æ¥ä»å®çæºå¤´è¯»ä¸ä¸ççï¼å次说æä¸ä¸ï¼å¤è¯å 次ççï¼æ¯ç«æä»¬è¿ä¸ç¥éè¿ä¸ªè¿ç¨å°åºæ¯ä¸æ¯å®å
¨å¡æ»äºå¢ï¼ï¼
[root@oel6 ~]# cat /proc/27288/wchan
rpc_wait_bit_killable
é¢â¦â¦è¿ä¸ªè¿ç¨å±
ç¶å¨çå¾
æäºRPCè°ç¨ãRPCè°ç¨é常æå³çè¿ä¸ªç¨åºå¨è·å
¶ä»è¿ç¨éä¿¡ï¼ä¸ç®¡æ¯æ¬å°è¿æ¯è¿ç¨ï¼ãæ»å½ï¼æä»¬è¿æ¯ä¸ç¥é为ä»ä¹ä¼å¡ä½ã
å°åºæ¯ä¸æ¯å®å
¨å¡ä½äºï¼
卿们æå¼è¿ç¯æç« æåçè°åºä¹åï¼æä»¬è¿æ¯å
ææ¸
æ¥è¿ä¸ªè¿ç¨å°åºæ¯ä¸æ¯å®å
¨å¡ä½äºã
å
¶å®ï¼å¨æ°ä¸ç¹çLinuxå
æ ¸ä¸ï¼/proc/PID/status è¿ä¸ªæä»¶å¯ä»¥åè¯æä»¬è¿ç¹ï¼
[root@oel6 ~]# cat /proc/27288/status
Name: find
State: D (disk sleep)
Tgid: 27288
Pid: 27288
PPid: 27245
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6 10
VmPeak: 112628 kB
VmSize: 112280 kB
VmLck: 0 kB
VmHWM: 1508 kB
VmRSS: 1160 kB
VmData: 260 kB
VmStk: 136 kB
VmExe: 224 kB
VmLib: 2468 kB
VmPTE: 88 kB
VmSwap: 0 kB
Threads: 1
SigQ: 4/15831
SigPnd: 0000000000040000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000180000000
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: ffffffffffffffff
CapBnd: ffffffffffffffff
Cpus_allowed: ffffffff,ffffffff
Cpus_allowed_list: 0-63
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 9950
nonvoluntary_ctxt_switches: 17104
(主è¦çStateåæ®µåæå两è¡ï¼voluntary_ctxt_switcheså nonvoluntary_ctxt_switches)
è¿ç¨å¤äºDââDisk Sleepï¼ä¸å¯ææä¼ç ç¶æï¼ï¼voluntary_ctxt_switches å nonvoluntary_ctxt_switchesçæ°éåè½åè¯æä»¬è¿ä¸ªè¿ç¨è¢«åç»æ¶é´ççæ¬¡æ°ãè¿å ç§åççè¿äºæ°åææ²¡æå¢å ï¼å¦ææ²¡æå¢å ï¼å说æè¿ä¸ªè¿ç¨æ¯å®å
¨å¡æ»çï¼ç®åæå¨è¿½è¸ªçä¾åå°±æ¯è¿ä¸ªæ
åµï¼åä¹ï¼å说æè¿ç¨ä¸æ¯å®å
¨å¡ä½çç¶æã
顺便æä¸ä¸ï¼è¿æä¸¤ç§åæ³ä¹å¯ä»¥è·åè¿ç¨çä¸ä¸æåæ¢æ°éï¼ç¬¬äºç§å¨èæ§çå
æ ¸ä¸ä¹è½å·¥ä½ï¼ï¼
[root@oel6 ~]# cat /proc/27288/sched
find (27288, #threads: 1)
---------------------------------------------------------
se.exec_start : 617547410.689282
se.vruntime : 2471987.542895
se.sum_exec_runtime : 1119.480311
se.statistics.wait_start : 0.000000
se.statistics.sleep_start : 0.000000
se.statistics.block_start : 617547410.689282
se.statistics.sleep_max : 0.089192
se.statistics.block_max : 60082.951331
se.statistics.exec_max : 1.110465
se.statistics.slice_max : 0.334211
se.statistics.wait_max : 0.812834
se.statistics.wait_sum : 724.745506
se.statistics.wait_count : 27211
se.statistics.iowait_sum : 0.000000
se.statistics.iowait_count : 0
se.nr_migrations : 312
se.statistics.nr_migrations_cold : 0
se.statistics.nr_failed_migrations_affine: 0
se.statistics.nr_failed_migrations_running: 96
se.statistics.nr_failed_migrations_hot: 1794
se.statistics.nr_forced_migrations : 150
se.statistics.nr_wakeups : 18507
se.statistics.nr_wakeups_sync : 1
se.statistics.nr_wakeups_migrate : 155
se.statistics.nr_wakeups_local : 18504
se.statistics.nr_wakeups_remote : 3
se.statistics.nr_wakeups_affine : 155
se.statistics.nr_wakeups_affine_attempts: 158
se.statistics.nr_wakeups_passive : 0
se.statistics.nr_wakeups_idle : 0
avg_atom : 0.041379
avg_per_cpu : 3.588077
nr_switches : 27054
nr_voluntary_switches : 9950
nr_involuntary_switches : 17104
se.load.weight : 1024
policy : 0
prio : 120
clock-delta : 72
æä»¬è¦çå°±æ¯è¾åºä¸çnr_switchesåæ®µï¼çäº nr_voluntary_switches + nr_involuntary_switchesï¼ï¼å¼æ¯27054ï¼è·/proc/PID/schedstat ä¸ç第ä¸ä¸ªå段æ¯ä¸è´çï¼
[root@oel6 ~]# cat /proc/27288/schedstat
1119480311 724745506 27054
ç䏿®µæ¶é´ï¼ä¹æ¯ä¸æ ·çç»æï¼æ°é没æå¢é¿â¦â¦
éè¿/procæä»¶ç³»ç»åæ¢Linuxå
æ ¸æä¸ç
çæ
嵿们çç¨åºæ¯å¡æ»æ çäºï¼straceåpstackè¿äºä½¿ç¨ptraceç³»ç»è°ç¨æ¥attachå°è¿ç¨ä¸æ¥è¿è¡è·è¸ªçè°è¯å¨ä¹æ²¡å¥ç¨ï¼å 为è¿ç¨å·²ç»å®å
¨å¡ä½äºï¼é£ä¹ptraceè¿ç§ç³»ç»è°ç¨ä¼°è®¡ä¹ä¼æèªå·±å¡ä½ãï¼é¡ºä¾¿è¯´ä¸ä¸ï¼ææ¾ç»ç¨straceæ¥è·è¸ªattachå°å
¶ä»è¿ç¨ä¸çstraceï¼ç»æstraceæé£ä¸ªè¿ç¨ææäºãå«è¯´ææ²¡è¦åè¿ä½ ï¼ï¼
没äºstraceåpstackï¼æä»¬è¿è½æä¹æ¥ç¨åºå¡å¨äºåªä¸ªç³»ç»è°ç¨å¢ï¼å½ç¶æ¯ /proc/PID/syscall äºï¼
[root@oel6 ~]# cat /proc/27288/syscall
262 0xffffffffffffff9c 0x20cf6c8 0x7fff97c52710 0x100 0x100 0x676e776f645f616d 0x7fff97c52658 0x390e2da8ea
è¿é¬¼è¾åºæä¹çå¢ï¼å¾ç®åï¼0xå å¾å¤§çæ°åä¸è¬å°±æ¯å
åå°åï¼ä½¿ç¨pmap类似çå·¥å
·å¯ä»¥çå
·ä½ä»ä»¬æåäºä»ä¹å
容ï¼ï¼å¦ææ¯å¾å°çæ°åçè¯ï¼å¾å¯è½å°±æ¯ä¸äºç´¢å¼å·ï¼ä¾å¦æå¼çæä»¶æè¿°ç¬¦ï¼å°±å/proc/PID/fdçå
容䏿 ·ï¼ãå¨è¿ä¸ªä¾åä¸ï¼å 为æ¯syscallæä»¶ï¼ä½ å¯ä»¥âåççæµâè¿æ¯ä¸ä¸ªç³»ç»è°ç¨å·ï¼è¿ç¨å¡å¨äº262å·ç³»ç»è°ç¨ï¼
éè¦æ³¨æçæ¯ç³»ç»è°ç¨å·å¨ä¸åçç³»ç»ä¸å¯è½æ¯ä¸ä¸è´çï¼æä»¥ä½ å¿
é¡»ä»ä¸ä¸ªåéç.hæä»¶ä¸å»æ¥çå®å
·ä½æåäºåªä¸ªè°ç¨ãé常æ
åµä¸ï¼å¨/usr/includeä¸æç´¢ syscall* æ¯ä¸ªå¾å¥½çåå
¥ç¹ã卿çç³»ç»ä¸ï¼è¿ä¸ªç³»ç»è°ç¨æ¯å¨ /usr/include/asm/unistd_64.hä¸å®ä¹çï¼
[root@oel6 ~]# grep 262 /usr/include/asm/unistd_64.h
#define __NR_newfstatat 262
æ ¹æ®ä¸é¢æ¾ç¤ºçç»æå¯ä»¥çå°è¿ä¸ªç³»ç»è°ç¨å« newfstatatï¼æä»¬åªéè¦man newfstatatå°±å¯ä»¥ç¥éè¿æ¯å¹²å¥çäºãé对系ç»è°ç¨æä¸ä¸ªå®ç¨å°æå·§å享ï¼å¦æmanæå䏿²¡æåç°ä¸ä¸ªç³»ç»è°ç¨ï¼é£ä¹è¯·å°è¯å é¤ä¸äºç¹å®çåç¼æè
åç¼ï¼ä¾å¦man pread64ä¸è¡å°±å°è¯man preadï¼ãè¿æè
ï¼å¹²ègoogleä¹â¦â¦
æ»ä¹ï¼è¿ä¸ªå«ânew-fstat-atâçç³»ç»è°ç¨çä½ç¨å°±æ¯è®©ä½ å¯ä»¥å stat ç³»ç»è°ç¨ä¸æ ·è¯»åæä»¶ç屿§ï¼æä»¬çç¨åºå°±æ¯å¡å¨è¿ä¸ªæä½ä¸ï¼ç»äºå¨è°è¯è¿ä¸ªç¨åºçéè·¯ä¸è¿åºäºä¸å¤§æ¥ï¼ä¸å®¹æï¼ä½æ¯ä¸ºå¥ä¼å¡å¨è¿ä¸ªè°ç¨å¢ï¼
好å§ï¼ç»äºè¦äº®çæ¬äºäºãééä»ç»ï¼/proc/PID/stackï¼è½è®©ä½ çå°ä¸ä¸ªè¿ç¨å
æ ¸æçè°ç¨æ ä¿¡æ¯çç¥å¨ï¼èä¸åªæ¯éè¿catä¸ä¸ªprocæä»¶ï¼ï¼ï¼
[root@oel6 ~]# cat /proc/27288/stack
[] rpc_wait_bit_killable+0x24/0x40 [sunrpc]
[] __rpc_execute+0xf5/0x1d0 [sunrpc]
[] rpc_execute+0x43/0x50 [sunrpc]
[] rpc_run_task+0x75/0x90 [sunrpc]
[] rpc_call_sync+0x42/0x70 [sunrpc]
[] nfs3_rpc_wrapper.clone.0+0x35/0x80 [nfs]
[] nfs3_proc_getattr+0x47/0x90 [nfs]
[] __nfs_revalidate_inode+0xcc/0x1f0 [nfs]
[] nfs_revalidate_inode+0x36/0x60 [nfs]
[] nfs_getattr+0x5f/0x110 [nfs]
[] vfs_getattr+0x4e/0x80
[] vfs_fstatat+0x70/0x90
[] sys_newfstatat+0x24/0x50
[] system_call_fastpath+0x16/0x1b
[] 0xffffffffffffffff
å¯ä»¥çå°æé¡¶é¨ç彿°å°±æ¯æä»¬ç°å¨å¡å¨çå°æ¹ï¼æ£æ¯ä¸é¢WCHANåæ®µæ¾ç¤ºçå
容ï¼rpc_wait_bit_killableãï¼æ³¨æï¼å®é
ä¸ä¸ä¸å®æé¡¶é¨ç彿°å°±æ¯æä»¬æ³è¦çï¼å 为å
æ ¸å¯è½ä¹æ§è¡äº schedule ä¹ç±»ç彿°æ¥è®©ç¨åºè¿å
¥ä¼ç æè
è¿è¡ãè¿éæ²¡ææ¾ç¤ºå¯è½æ¯å 为å¡ä¸»æ¯å 为å
¶ä»è°ç¨å¡ä¸»äºæè¿å
¥ç¡ç ç¶æï¼è䏿¯ç¸åçé»è¾ï¼ã
å¤äºäºè¿ä¸ªç¥å¨ï¼æä»¬ç°å¨å¯ä»¥ä»å¤´å°å°¾æ¨å¯¼åºç¨åºå¡ä¸»çæ´ä¸ªè¿ç¨åé ææç» rpc_wait_bit_killable 彿°å¡ä¸»çåå äºï¼
â æåºé¨ç system_call_fastpath æ¯ä¸ä¸ªé常常è§çç³»ç»è°ç¨å¤ç彿°ï¼æ£æ¯å®è°ç¨äºæä»¬åæä¸ç´æçé®ç newfstatat ç³»ç»è°ç¨ãç¶åï¼åå¾ä¸å¯ä»¥çå°ä¸å nfsç¸å
³çå彿°è°ç¨ï¼è¿æ ·æä»¬åºæ¬å¯ä»¥æå®æ£nfsç¸å
³çä¸å±ä»£ç 导è´äºç¨åºå¡ä½ãææ²¡ææ¨æè¯´é®é¢æ¯åºå¨nfsç代ç 鿝å 为继ç»å¾ä¸å¯ä»¥çå°rpcç¸å
³ç彿°ï¼å¯ä»¥æ¨ææ¯nfs为äºè·å
¶ä»è¿ç¨è¿è¡éä¿¡åè°ç¨äºrpcç¸å
³ç彿°ââå¨è¿ä¸ªä¾åä¸ï¼å¯è½æ¯[kworker/N:N], [nfsiod], [lockd] or [rpciod]çå
æ ¸çIO线ç¨ï¼ä½æ¯è¿ä¸ªè¿ç¨å 为æäºåå ï¼çæµæ¯ç½ç»é¾æ¥æå¼ä¹ç±»çé®é¢ï¼å乿²¡ææ¶å°ååºçåå¤ã
åæ ·çï¼æä»¬å¯ä»¥å©ç¨ä»¥ä¸çæ¹æ³æ¥æ¥çåªäºè¾
å©IOçå
æ ¸çº¿ç¨ä¸ºä»ä¹ä¼å¡å¨ç½ç»ç¸å
³çæä½ä¸ï¼å°½ç®¡kworkerså°±ä¸ç®ç®å忝NFSçRPCéä¿¡äºãå¨å¦å¤ä¸æ¬¡é®é¢éç°çå°è¯ï¼éè¿NFSæ·è´å¤§æä»¶ï¼ä¸ï¼æå好ææå°ä¸æ¬¡kwrokersçå¾
ç½ç»çæ
åµï¼
[root@oel6 proc]# for i in `pgrep worker` ; do ps -fp $i ; cat /proc/$i/stack ; done
UID PID PPID C STIME TTY TIME CMD
root 53 2 0 Feb14 ? 00:04:34 [kworker/1:1]
[] __cond_resched+0x2a/0x40
[] lock_sock_nested+0x35/0x70
[] tcp_sendmsg+0x29/0xbe0
[] inet_sendmsg+0x48/0xb0
[] sock_sendmsg+0xef/0x120
[] kernel_sendmsg+0x41/0x60
[] xs_send_kvec+0x8e/0xa0 [sunrpc]
[] xs_sendpages+0x173/0x220 [sunrpc]
[] xs_tcp_send_request+0x5d/0x160 [sunrpc]
[] xprt_transmit+0x83/0x2e0 [sunrpc]
[] call_transmit+0xa8/0x130 [sunrpc]
[] __rpc_execute+0x66/0x1d0 [sunrpc]
[] rpc_async_schedule+0x15/0x20 [sunrpc]
[] process_one_work+0x13e/0x460
[] worker_thread+0x17c/0x3b0
[] kthread+0x96/0xa0
[] kernel_thread_helper+0x4/0x10
éè¿å¼å¯å
æ ¸çtracingè¯å®å¯ä»¥ç¡®åæ¾å°æ¯å
æ ¸çåªä¸¤ä¸ªçº¿ç¨ä¹é´åéä¿¡ï¼ä¸è¿éäºæç« ç¯å¹
ï¼è¿éå°±ä¸å±å¼äºï¼æ¯ç«è¿åªæ¯ä¸ä¸ªå®ç¨ï¼ä¸ç®åï¼çé®é¢è¿½è¸ªå®ä½ç»ä¹ ã
è¯æåâä¿®å¤â
å¤äºäºç°ä»£å
æ ¸æä¾çæ ä¿¡æ¯åæ ·ï¼æä»¬å¾ä»¥ç³»ç»å°è¿½è¸ªå°æä»¬çfindå½ä»¤å¡å¨äºåªéââå
æ ¸ä¸çNFS代ç ãèä¸ä¸è¬æ
åµä¸ï¼NFSç¸å
³å¡æ»ï¼æéè¦æççå°±æ¯ç½ç»é®é¢ãä½ çææ¯æä¹éç°ä¸é¢çè¿ä¸ªé®é¢çï¼å
¶å®å°±æ¯å¨åè¿NFSæå¨èæä¸çä¸åç£çï¼æ§è¡findå½ä»¤ï¼ç¶åè®©èææºä¼ç â¦â¦è¿æ ·å°±å¯ä»¥éç°ç±»ä¼¼ç½ç»ï¼é
ç½®æè
é²ç«å¢ï¼å¯¼è´ç龿¥é»é»ææä½æ¯å¹¶æ²¡æéç¥TCPå¦ä¸ç«¯çè¿ç¨çæ
åµã
å 为 rpc_wait_bit_killable æ¯å¯ä»¥ç´æ¥è¢«å®å
¨å¹²æç彿°ï¼è¿éæä»¬éæ©éè¿ kill -9ç´æ¥å¹²æå®ï¼
[root@oel6 ~]# ps -fp 27288
UID PID PPID C STIME TTY TIME CMD
root 27288 27245 0 11:57 pts/0 00:00:01 find . -type f
[root@oel6 ~]# kill -9 27288
[root@oel6 ~]# ls -l /proc/27288/stack
ls: cannot access /proc/27288/stack: No such file or directory
[root@oel6 ~]# ps -fp 27288