Oracle JDBC RedHat 7.7 上没有更多数据可从套接字读取
Oracle JDBC No more data to read from socket on RedHat 7.7
我在 sql-maven-plugin 尝试连接和 运行 执行时收到 "No more data to read from socket" 错误。
问题是我只在 Jenkins slave 运行ning RedHat 7.7 上遇到这个错误,但在我的 Macbook Pro 上它工作正常。
这不是凭据问题,因为我尝试使用错误的密码,构建立即失败,但当凭据正确时,它会卡住一段时间,然后因 "No more data to read from socket" 错误而失败。
免责声明:我正在与@emanuel502 合作
添加此标志可解决问题:-Djava.security.egd=file:/dev/urandom
- 我们需要熵来处理安全问题(身份验证、TLS)
- 默认情况下,jvm 使用 /dev/random 作为熵源(=基本上,随机性)
- 但是如果有 "not enough entropy",这个会阻塞,而
/dev/urandom
不会
- 在非常旧的系统上(linux 内核 <
3.16
而当前的是 5.6),/dev/random
根本没有足够的熵来使用(有工具可以让它变得更好,系统管理员可以安装)
- 因为我们的 jenkins slaves 在 RedHat 7.7 上,而 RedHat 只在大版本中提供 minor/security 更新,而 RedHat 7 是 2014 年的(那时他们可能已经在使用旧内核),我们在内核
3.10
上,这实际上意味着一个简单的 cat /dev/random 在几个字节后阻塞
- 有时候,你刚好在尝试的那一刻熵足够,看不出有什么问题,所以很难调试;在我们的例子中,消息是 "Not enough data to read from socket"(仅此而已)。我记得几年前的一个案例,由于同样的原因,TLS 连接非常慢/阻塞。
我个人的结论:永远不要相信"it's old, so it's stable"那件事。在较新的系统上(内核 3.16
是从 2013 年 6 月 30 日开始的)你甚至不知道这个问题。使用 RedHat(自去年 RedHat 8 推出以来甚至没有升级)使 7 年前解决的问题变成了问题。
我们为此浪费了几天
我并没有真正学到:我在 4 年前就遇到过这个问题,但我认为我这辈子再也见不到这样的系统了,我可以忘记它。
来源:
我在 sql-maven-plugin 尝试连接和 运行 执行时收到 "No more data to read from socket" 错误。
问题是我只在 Jenkins slave 运行ning RedHat 7.7 上遇到这个错误,但在我的 Macbook Pro 上它工作正常。
这不是凭据问题,因为我尝试使用错误的密码,构建立即失败,但当凭据正确时,它会卡住一段时间,然后因 "No more data to read from socket" 错误而失败。
免责声明:我正在与@emanuel502 合作
添加此标志可解决问题:-Djava.security.egd=file:/dev/urandom
- 我们需要熵来处理安全问题(身份验证、TLS)
- 默认情况下,jvm 使用 /dev/random 作为熵源(=基本上,随机性)
- 但是如果有 "not enough entropy",这个会阻塞,而
/dev/urandom
不会 - 在非常旧的系统上(linux 内核 <
3.16
而当前的是 5.6),/dev/random
根本没有足够的熵来使用(有工具可以让它变得更好,系统管理员可以安装) - 因为我们的 jenkins slaves 在 RedHat 7.7 上,而 RedHat 只在大版本中提供 minor/security 更新,而 RedHat 7 是 2014 年的(那时他们可能已经在使用旧内核),我们在内核
3.10
上,这实际上意味着一个简单的 cat /dev/random 在几个字节后阻塞 - 有时候,你刚好在尝试的那一刻熵足够,看不出有什么问题,所以很难调试;在我们的例子中,消息是 "Not enough data to read from socket"(仅此而已)。我记得几年前的一个案例,由于同样的原因,TLS 连接非常慢/阻塞。
我个人的结论:永远不要相信"it's old, so it's stable"那件事。在较新的系统上(内核 3.16
是从 2013 年 6 月 30 日开始的)你甚至不知道这个问题。使用 RedHat(自去年 RedHat 8 推出以来甚至没有升级)使 7 年前解决的问题变成了问题。
我们为此浪费了几天
我并没有真正学到:我在 4 年前就遇到过这个问题,但我认为我这辈子再也见不到这样的系统了,我可以忘记它。
来源: