实际上我尝试使用带有java的bash控制台在opensuse 11上启动SIPP 3.3。 当我用
启动SIPP时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终端是否可能冻结? 我该如何删除此警告?
答案 0 :(得分:5)
我是 SIPp 的维护者,我最近一直在研究FD_SETSIZE
问题。
正如在Increasing limit of FD_SETSIZE and select中提到的,FD_SETSIZE
是可以传递给select()调用的最大文件描述符,因为它在内部使用位字段来跟踪文件描述符。 SIPp 在其中包含代码以检查其自己的最大打开文件限制(即ulimit -n
所示的限制),如果它大于FD_SETSIZE
,则将其缩减为{ {1}}以避免select()。
然而,这实际上已经有一段时间没有必要了 - SIPp 使用了poll()而不是select()(没有FD_SETSIZE
限制,并且一直是POSIX自2001年成为维护者之前,自2001年以来一直是标准化和可移植的。 SIPp 现在也使用FD_SETSIZE
来提供更好的性能,从v3.4版本开始。
我现在已经在https://github.com/SIPp/sipp的开发代码中删除了此epoll
项检查,并将其替换为更明智的检查 - 确保最大打开套接字数(加上最大数量)打开调用,每个调用都可以打开自己的媒体套接字)低于文件描述符的最大数量。
答案 1 :(得分:3)
此警告可能与 SIPp 中的多插槽传输选项有关,例如。 -t un
或-t tn
,(虽然我已观察到它会产生这些警告,即使没有指定其中一个)。
SIPp 包含一个控制此警告消息的选项:
-skip_rlimit : Do not perform rlimit tuning of file descriptor limits. Default: false.
虽然它对我有抑制警告输出的预期效果,但它本身似乎是一个稍微危险的选择。虽然我不确定如果你包含这个选项并且 SIPp 尝试打开比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
答案 2 :(得分:0)
它几乎意味着它所说的......你的每进程打开文件限制(ulimit -n
)大于预定义的常量FD_SETSIZE
,即1024.所以程序正在调整您的打开文件限制为FD_SETSIZE
。