Linux kernel futex.c的bug导致JVM不可用
生活随笔
收集整理的這篇文章主要介紹了
Linux kernel futex.c的bug导致JVM不可用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JVM死鎖導致線程不可用,然后會瞬間起N個線程,當然也是不可用的,因為需要的對象死鎖,然后耗盡文件句柄導致外部TCP無法建議拒絕服務,jstack之后就會恢復。
解決辦法:替換中間件類庫 ,比如httpclient的。
原因大致是:
某個switch分支缺少memory barrier的正確處理,導致外部應用如JVM的lock被錯誤鎖住;一般jstack連后就恢復。
https://github.com/torvalds/linux/commit/76835b0ebf8a7fe85beb03c75121419a7dec52f0
https://www.zhihu.com/search?type=content&q=jvm%E5%81%87%E6%AD%BB
https://ma.ttias.be/linux-futex_wait-bug/
JVM內存模型-重排序&內存屏障
內核源碼:https://mirrors.edge.kernel.org/pub/linux/kernel/
http://mirrors.163.com/kernel/linux/kernel/
總結
以上是生活随笔為你收集整理的Linux kernel futex.c的bug导致JVM不可用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线上java问题排查
- 下一篇: JVM虚拟机参数配置官方文档