3

我正在使用 Snmp4j 2.2.3,当我org.snmp4j.Snmp通过构建对象时观察到长达 8 秒的延迟,public Snmp(TransportMapping)我想知道是否有人知道我应该在 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

4 回答 4

3

都灵正确地指出了这个问题。

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

TransportMapping transport = new DefaultUdpTransportMapping();
MessageDispatcher disp = new MessageDispatcherImpl();
disp.addMessageProcessingModel(new MPv2c());
snmp = new Snmp(disp, transport);
...
snmp.listen();
于 2016-01-22T13:25:06.270 回答
2

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

找到了解决方案http://snmp4j.agentpp.narkive.com/xzGw7pL1/initialize-too-slow以及如何使用 Java SecureRandom 解决性能问题?

于 2015-05-19T21:00:35.903 回答
1

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

于 2014-02-02T09:54:05.583 回答
0

我已经看到这个问题发生在作为虚拟机运行的红帽风格上,因为无法访问硬件来为 urandom 生成熵。如果是这种情况,安装 haveged 可以解决问题。它是熵生成的替代来源。

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

与 hasged 相关的安全帖子提到了其他熵生成方法:https ://security.stackexchange.com/questions/34523/is-it-appropriate-to-use-haveged-as-a-source-of-entropy-on -虚拟机

于 2018-11-16T18:53:21.843 回答