SNMP构造函数需要几秒钟才能返回

时间:2013-11-18 20:00:17

标签: java snmp4j

我正在使用Snmp4j 2.2.3并且当我通过org.snmp4j.Snmp构造public Snmp(TransportMapping)对象时,我观察到最多8秒的延迟我想知道是否有人知道Snmp中我应该关注哪个注意。我在Redhat Linux上看到了这种情况,但是从Windows XP框运行时我没有看到延迟。

在以下代码中,第3行“Snmp snmp = new Snmp(transport);”冻结长达8秒钟。

Address targetAddress = new UdpAddress(host + "/" + port);
TransportMapping transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);

CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
target.setRetries(2);
target.setTimeout(1500);
target.setVersion(SnmpConstants.version2c);
target.setMaxSizeRequestPDU(65535);

snmp.listen();

由于

4 个答案:

答案 0 :(得分:3)

Turin正确地指出了问题。

如果您只使用SNMPv2c,则可以进行更清洁的初始化,而不会加载与加密相关的v3类。

TransportMapping transport = new DefaultUdpTransportMapping();
MessageDispatcher disp = new MessageDispatcherImpl();
disp.addMessageProcessingModel(new MPv2c());
snmp = new Snmp(disp, transport);
...
snmp.listen();

答案 1 :(得分:2)

我在snmp4j 1.11.2中发现了同样的问题。 将-Djava.security.egd=file:/dev/./urandom添加到jvm解决了这个问题。

找到解决方案http://snmp4j.agentpp.narkive.com/xzGw7pL1/initialize-too-slowHow to solve performance problem with Java SecureRandom?

答案 2 :(得分:1)

最有可能的是,这是操作系统的RedHat随机种子初始化中的问题。据我所知,有一个可用于操作系统的修复程序,可确保熵计算不会占用太多时间。

答案 3 :(得分:0)

我已经看到这个问题发生在由于无法访问硬件以生成熵而导致作为虚拟机运行的Red Hat版本的虚拟机上。在这种情况下,安装Haveged可解决此问题。它是产生熵的替代来源。

如何进行设置: https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged

与hadged相关的安全文章提到了其他产生熵的方法:https://security.stackexchange.com/questions/34523/is-it-appropriate-to-use-haveged-as-a-source-of-entropy-on-virtual-machines