2013-11-20 55 views
4

實際上,我嘗試在opensuse 11上啓動SIPP 3.3,並使用帶有java的bash控制檯。 當我開始SIPP與SIPP:打開文件限制> FD_SETSIZE

proc = Runtime.getRuntime().exec("/bin/bash", null, wd); 

... 

printWriter.println("./sipp -i "+Config.IP+" -sf uac.xml "+Config.IP+":5060"); 

錯誤流給出以下輸出

警告:打開文件限制> FD_SETSIZE;限制最大值打開文件的數量爲FD_SETSIZE = 1024 解決遠程主機'137.58.120.17'...完成。

警告的含義是什麼?因爲這個警告,bash終端可能會凍結嗎? 我如何刪除此警告?

回答

3

此警告應該與SIPp中的多插槽傳輸選項有關。 -t un-t tn,(儘管我已經觀察到它即使沒有指定其中的一個,也會生成這些警告)。

西普包括控制此警告消息的選項:

-skip_rlimit  : Do not perform rlimit tuning of file descriptor limits. Default: false. 

雖然這對我來說抑制報警輸出的預期的效果,其本身而言,它似乎是一個稍微危險的選項。雖然我不能肯定,如果你有此選項,並西普試圖打開多個插座比是根據FD_SETSIZE可會發生什麼事,你可能會避免在這一方面可能出現的問題也通過包括max_socket說法:

-max_socket  : Set the max number of sockets to open simultaneously. This option is 
         significant if you use one socket per call. Once this limit is reached, 
         traffic is distributed over the sockets already opened. Default value is 
         50000 
0

這意味着差不多就是它說...你每個進程打開文件限制(ulimit -n)大於預先定義的常量FD_SETSIZE,這是1024所以程序向下調整你打開文件限制匹配FD_SETSIZE

+0

好的,我如何增加'FD_SETSIZE'到打開文件限制的數量?這樣警告就不會再出現了。 – chuhx

+0

@ user3008764 [This](http://stackoverflow.com/questions/7976388/increasing-limit-of-fd-setsize-and-select)似乎是相關的。 – twalberg

5

我是SIPp的維護者,最近我一直在關注FD_SETSIZE問題。

正如在Increasing limit of FD_SETSIZE and select中提到的,FD_SETSIZE是可以傳遞給select()調用的最大文件描述符,因爲它在內部使用位字段來跟蹤文件描述符。 SIPp在其中具有代碼來檢查其自己的最大打開文件限制(即,由ulimit -n顯示的那個限制),並且如果它大於FD_SETSIZE,則將其減小到FD_SETSIZE以避免與select()的問題。

然而,這實際上已經沒有必要了一會兒 - 西普已使用輪詢(),而不是選擇()(不具有FD_SETSIZE限制,並已POSIX標準化和便攜式自2001年),因爲在2012年成爲維護人員之前。SIPp現在也使用epoll,從v3.4版本開始可以獲得更好的性能。

我現在已經在https://github.com/SIPp/sipp除去在開發這個代碼FD_SETSIZE檢查,並與一個更明智的檢查取代它 - 確保開放套接字的最大數量(加上開放的最大呼叫數量,其中的每一個可能打開它自己的媒體套接字)低於文件描述符的最大數量。