zuai / Hui

Here for expressing my thoughts
8 stars 5 forks source link

JDK8u111是否修复了ltq的缺陷? #1

Open maoxiajun opened 7 years ago

maoxiajun commented 7 years ago

你好,我对比了一下jdk8u111的ltq的代码,发现Node.CANCEL这个在官方包里并不存在,我按博客上的步骤debug了一下,似乎也没有出现CPU占满的情况,然而我线上服务从8u45升级到8u111之后,机器负载依然会逐日升高,jstack打出来的堆栈显示CPU占用时间最长的几个线程依然跟ltq有关。。 image 想问问有没有解决这个问题的建议

zuai commented 7 years ago

你好,感谢关注,好久没有登录了。 我刚按http://blog.csdn.net/luoyuyou/article/details/23176771 博客上的方式尝试了下jdk8u121,CPU占满的情况依然是存在的。是不是你测试的步骤没有完全对? Node.CANCEL是我自己写的LinkedTransferQueueFix中的,是我对于LinkedTransferQueue做的修改。就是为了解决上面博客中的数据丢失和cpu占满的问题。 至于你说的问题,我不确定是不是由于这里说的bug引起....不过bug存在是肯定的。建议你使用其他的并发队列替换掉ltq。

maoxiajun commented 7 years ago

嗯,最近这个问题似乎又好转了一点,另外除了ltq,还有几个占用CPU较高的线程是挂在ThreadLocal.expunge上了,我用了g1gc,不知道会不会跟weak reference有关