这里的任何人都可以帮助阐明“在3秒内从SecureRandom生成种子失败的条件。从ThreadLocalRandom打印不够的委托”警告消息吗?
我们能够在紧密循环中点击服务器时始终触发警告。虽然我知道已经解决了(https://github.com/netty/netty/commit/3921f7c88a8db4feb45df89b0b28b3a9898993ab),但一切仍然有效,尽管有3s停顿。
我们想修改我们的设置以避免陷入这些情况。我对Netty代码库不太熟悉,但快速的grep和扫描产生了它似乎用于DefaultChannelId
中的通道ID。如果为每个传入的请求分配了那些,我可以看到这可能会耗尽本地的熵。如果是这种情况,我们可以为频道使用不同的id机制吗?
答案 0 :(得分:3)
如果你有很多工作线程,可能会发生这种情况,并且在开始时每个请求都会遇到一个不同的工作线程,导致它要求SecureRandom
的新种子。
<强>更新强>
一个线程不需要超过cat /proc/sys/kernel/random/entropy_avail
的8个字节,但VM上的可用熵可能非常低。这是你测试它的方法:
/dev/urandom
这是一个让我确信我应该始终使用/dev/random
的页面:
http://www.2uo.de/myths-about-urandom/
有许多选项可以增加/dev/random
停止阻止的熵估算,例如haveged或virtio-rng,但最终区分/dev/urandom
和{{1}非常人为,所以你不妨使用/dev/urandom
。