2010年2月25日 星期四

processes fork and swap space

今天在Sun Solaris上進行壓力測試, 想當然爾跑出了一堆程式, 可是卻停在第20xx後程式就fork不出來了。可憐的是,程式的原始碼不是自己持有,也就是說跑的是別人家的程式,實在很難抓問題,尤其在沒有任何其他明顯線索下。沒辦法了,自己寫一支程式來測試看看嘍,好在之前有在Linux寫了一支壓力測試程式,重新Make後,就趕上架去處理吧。
RUN了2圈後,很快發現fork error , errno=12 (ENOMEM), 從man page上可以發現是swap space的問題,check一下指令
swap -l :查詢swap 空間設定為多少
swap -s:目前當下剩下的swap space 還有多少可用
在測試前後比較,明顯發現swap空間的不足,二話不說,當然是增加swap嘍。

話雖然這樣就解決了,只是fork程式跟swap空間有什麼關係呢
以下摘錄自: http://bbs.nsysu.edu.tw/txtVersion/treasure/linux/M.1013884061.A.html

BSD對swap space的處理頗為保守. 要求所有在主記憶體的page
在配置前都必須要先有一塊swap space. 所以swap space的大
小限制了可以執行的程式數量.不過這也保證程式只有在fork或
exec時才會發生記憶體不足的現象, 而不會執行到一半要被swap
出去, 卻找不到swap space可用的窘況.也就是說如果你的電腦有
64MB的記憶體,但是只劃了16MB的記憶體,這樣的系統只願意讓你使
用16MB而已, 這也是有些系統管理的書籍建議你swap space不要比
main memory小的原因.


這句話也為我自己解釋了長久以來在上課時,老師總要我們把swap空間開DRAM的1~2倍的原因

目前知道跟process 數量上限直接有關的
1. 實體記憶體大小
2.Swap 大小
3.System configuration(ulimit , plimit...etc)

那哪些是間接的呢
例如CPU idle, process使用的共用資源限制(例如程式去搶share memory resource)或socket resource...etc

不知道還有沒有別的?!

PS.真是小時不努力,老大徒傷悲

沒有留言:

張貼留言

文章分類