亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

一次進程hang住問題分析。。。

2024-06-28 13:24:53
字體:
來源:轉載
供稿:網友
一次進程hang住問題分析。。。

這兩天有同學使用數據校驗工具時發現進程hang住了,也不知道什么原因,我簡單看了看進程堆棧,問題雖然很簡單,但能導致程序hang住,也一定不是小問題。簡單說明下程序組件的結構,程序由兩部分構成,dbchk和dbchk_inner,dbchk采用python代碼實現,dbchk_inner采用C語言實現。dbchk負責并發控制,dbchk_inner則負責具體的校驗任務。用戶通過運行dbchk命令即可達到校驗的目的。進程關系如下:

$ pstree 18649

dbchk─┬─sh───dbchk_inner───2*[{scandiff}]

└─{dbchk}

回到問題本身,我用測試用例復現了hang住了場景,查看了dbchk和dbchk_inner的堆棧信息,信息如下:

dbchk進程18649堆棧信息:

$ pstack 18649

Thread 2 (Thread 0x7f4343fff700 (LWP 18658)):

#0 0x000000346f80f09d in waitpid () from /lib64/libpthread.so.0

#1 0x000000347190ff8a in ?? () from /usr/lib64/libpython2.6.so.1.0

#2 0x00000034718de706 in PyEval_EvalFrameEx () from /usr/lib64/libpython2.6.so.1.0

#3 0x00000034718e0797 in PyEval_EvalCodeEx () from /usr/lib64/libpython2.6.so.1.0

dbchk_inner進程18660堆棧信息:

pstack 18660

#0 0x000000346f4da3dd in write () from /lib64/libc.so.6

#1 0x000000346f470fd3 in _IO_new_file_write () from /lib64/libc.so.6

#2 0x000000346f470e9a in _IO_new_file_xsputn () from /lib64/libc.so.6

#3 0x000000346f46705d in fwrite () from /lib64/libc.so.6

#4 0x00000000004136f0 in Scanner::run(unsigned int) ()

可以看到父進程dbchk在卡在waitpid()函數,這個容易理解,它應該在等待子進程dbchk_inner結束;再看子進程dbchk_inner,dbchk_inner卡在fwrite()函數,這個就有點奇怪了,為啥寫會被阻塞呢?首先想到的是磁盤空間不夠了?看了下磁盤空間還有很大的剩余,那還有什么可能導致write卡住,還有一種可能就是緩沖區滿了,寫不下去。

基于這個思考,回頭看看dbchk的代碼

pio = subPRocess.Popen(command, shell=True, stdout=subprocess.PipE, stderr=subprocess.PIPE).wait()

可以看到程序里使用了Popen的wait函數,這可以解釋父進程為啥會卡住,因為子進程沒有執行完;注意Popen的參數,將stdout和stderr輸出重定向到了subprocess.PIPE,這個值表示父子進程之間的管道。那么子進程寫緩沖區卡住,應該就是因為PIPE的緩沖區滿了。為啥會滿呢,一是產生的數據太多;另一方面是沒有進程去緩沖區去取數據,導致緩沖區只進不出。PIPE緩沖區默認值大小4096個字節,這個可以通過ulimit -a得到,8*512=4096字節,并且這個值不可以修改的,因為值是定義在linux的頭文件里面,除非你重新編譯linux內核。

$ ulimit -a

core file size (blocks, -c) 0

……

pipe size (512 bytes, -p) 8

好了問題找到了,PIPE緩沖區滿是罪歸禍首,如何解這個問題?

1.不將stdout和stderr重定向管道,直接輸出

2.程序控制輸出到管道數據的大小

管道在進程間通信(IPC)使用很廣泛,shell命令就使用的很廣泛。比如:

ps –aux | grep MySQLd

上述命令表示獲取mysqld進程相關的信息。這里ps和grep兩個命令通信就采用了管道。管道有幾個特點:

1. 管道是半雙工的,數據只能單向流動,ps命令的輸出是grep的輸出

2. 只能用于父子進程或兄弟進程通信,這里可以認為ps和grep命令都是shell(bash/pdksh/ash/dash)命令的子進程,兩者是兄弟關系。

3. 管道相對于管道兩端的進程而言就是一個文件,并且只存在于內存中。

4. 寫入端不斷往管道寫,并且每次寫到管道末尾;讀取端則不斷從管道讀,每次從頭部讀取。

到這里大家可能會有一個疑問,管道兩端的進程,寫入進程不斷的寫,讀取進程不斷的讀,那么什么時候結束呢?比如我們剛剛這個命令很快就結束了,它的原理是怎么樣的呢?對于管道,這里有兩個基本原則:

1.當讀一個寫端已經關閉的管道時,在所有數據被讀取后,read返回0,以指示達到文件結束處。

2.當寫一個讀端已經關閉的管道時,會產生sigpipe信息。

結合這個例子,當ps寫管道結束后,就會自動關閉,此時grep進程read就會返回0,然后自動結束。

參考文檔:

《UNIX環境高級編程》

http://blog.chinaunix.net/uid-26833883-id-3227144.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
少妇精69xxtheporn| 国产精品揄拍500视频| 成人有码在线视频| 欧美老女人性生活| 欧美成人精品h版在线观看| 色老头一区二区三区| 国产精品午夜一区二区欲梦| 久久精品国产亚洲一区二区| 欧美成人精品影院| 亚洲97在线观看| 国产原创欧美精品| 一区二区成人av| 亚洲在线第一页| 日韩av网站导航| 成人中心免费视频| 精品香蕉在线观看视频一| 亚洲国产精品久久久久秋霞蜜臀| 欧美天天综合色影久久精品| 欧美视频第一页| 91久久国产综合久久91精品网站| 最近2019年好看中文字幕视频| 久久久精品国产| 欧美日韩日本国产| 91精品视频观看| 久久99精品久久久久久青青91| 97在线看免费观看视频在线观看| 日韩国产欧美精品一区二区三区| 国产精品免费一区二区三区都可以| 日韩中文字幕在线视频播放| 久久免费精品日本久久中文字幕| 中文字幕不卡在线视频极品| 一区二区三区美女xx视频| 久久综合久久八八| 国产精品久久色| 91视频国产一区| 最好看的2019的中文字幕视频| 国产一区二区日韩| 国产亚洲欧美日韩美女| 91夜夜揉人人捏人人添红杏| 国产精品视频xxxx| 97国产suv精品一区二区62| 欧美丰满片xxx777| 69视频在线播放| 蜜臀久久99精品久久久久久宅男| 亚洲女人天堂av| 俺也去精品视频在线观看| 成人a视频在线观看| 精品久久久久久电影| 98视频在线噜噜噜国产| 伊人久久男人天堂| 精品久久久久久久久久久| 在线看欧美日韩| 久久免费视频网| 亚洲第一色中文字幕| 欧美大片在线看| 国产成人免费91av在线| 欧美日韩国产色视频| 精品久久久久久中文字幕大豆网| 97视频免费观看| 91精品国产高清久久久久久| 日韩精品在线观看一区二区| 最近2019免费中文字幕视频三| 精品日韩美女的视频高清| 91久久国产综合久久91精品网站| 国产成人精品久久亚洲高清不卡| 日韩极品精品视频免费观看| 日韩av在线网站| 欧美精品在线免费播放| 日本a级片电影一区二区| 97超碰蝌蚪网人人做人人爽| 亚洲精品一区中文| 91夜夜揉人人捏人人添红杏| 欧美激情国内偷拍| 欧美日韩国产精品一区二区三区四区| 亚洲精品网址在线观看| 国产69久久精品成人看| 日韩在线观看免费| 国产欧美日韩精品专区| 精品偷拍各种wc美女嘘嘘| 亚洲一区二区福利| 欧美美女18p| 欧美日韩中文字幕日韩欧美| 亚洲网址你懂得| 国产亚洲精品一区二555| 78色国产精品| 北条麻妃一区二区三区中文字幕| 日韩毛片在线看| 国产精品久久久久久久av大片| 97在线视频观看| 2019亚洲日韩新视频| 亚洲性猛交xxxxwww| 国产热re99久久6国产精品| 久久99热精品这里久久精品| 国产精品中文字幕久久久| 一区二区三区久久精品| 日韩精品小视频| 自拍亚洲一区欧美另类| 久久偷看各类女兵18女厕嘘嘘| 91中文在线视频| 久久综合国产精品台湾中文娱乐网| 日韩一区二区三区xxxx| 在线观看国产成人av片| 亚洲国产日韩欧美在线99| 伊人久久久久久久久久久久久| 欧美中文字幕在线播放| 亚洲国模精品私拍| 国产欧美婷婷中文| 欧美麻豆久久久久久中文| 欲色天天网综合久久| 欧美激情xxxxx| 91精品国产沙发| 亚洲成人中文字幕| 最近中文字幕mv在线一区二区三区四区| 亚洲国产成人在线播放| 国产精品国产福利国产秒拍| 亚洲国产婷婷香蕉久久久久久| 久久久久北条麻妃免费看| xvideos亚洲| 亚洲欧美中文字幕| 久久久久久久电影一区| 欧美国产精品va在线观看| 亚洲精品网站在线播放gif| 国产精品户外野外| 欧美精品激情在线观看| 亚洲精品国产精品自产a区红杏吧| 日韩激情av在线免费观看| 国产91在线播放| 欧美一级大片视频| 亚洲精品久久久久中文字幕二区| 亚洲精品白浆高清久久久久久| 精品久久久久久久久国产字幕| 亚洲国产欧美精品| 国产精品久久99久久| 97国产精品久久| 国产一区二区av| 国产精品一区二区三区在线播放| 亚洲国产日韩欧美在线99| 亚洲精品ady| 国产美女精品视频免费观看| 国产精品视频中文字幕91| 高清日韩电视剧大全免费播放在线观看| 国产+成+人+亚洲欧洲| 97久久精品在线| 国产精品一区二区三区毛片淫片| 午夜欧美不卡精品aaaaa| 久久99国产综合精品女同| 久久视频国产精品免费视频在线| 中文.日本.精品| 成人激情视频在线观看| 日韩日本欧美亚洲| 一区二区三区四区在线观看视频| 亚洲国产精品久久精品怡红院| 91影院在线免费观看视频| 国产免费一区二区三区在线观看| 亚洲r级在线观看| 亚洲人成绝费网站色www| 亚洲国产日韩欧美综合久久| 日本最新高清不卡中文字幕| 国产一区二区日韩精品欧美精品| 久久精品2019中文字幕| 国产午夜精品麻豆| 69av成年福利视频| 日韩在线视频网| 成人黄在线观看|