近期用户的生产环境下遇到一个很神奇的问题,并发数起来( 7 个 pod ,1000 并发)访问就会很慢,同一个接口有时候 300 多 ms ,有时候七八秒,数据库(华为 GaussDB ,基于 PG )。
用 arthas 跟了一下,发现慢在 org.postgresql.core.PGStream.receiveChar(),即使是一条简单的select 'x'有时候都能执行一两秒。
数据库那边反馈是 SQL 执行都很快,网络也排查过没问题(华为驻场工程师排查)。
疑问
然后从psjdbc项目找到下面这个 issue
里面有人提到 JDK-8075484
和我们遇到的问题比较能对上,jstack 看到了最终都是卡在at java.net.SocketInputStream.socketRead0
但是网上查到的关于 jdk 这个 bug 说的都是直接卡,我们遇到的情况是偶尔慢,但不会卡住不返回
求助
找了一天多了没有其他思路来排查这个问题了,想请教以下两个问题:
[ol]
[/ol]
环境信息
系统:华为欧拉
CPU:32 核 aarch64 ,生产环境 CPU 压力很小
内存:64G
网络:万兆
压测时 vmstat 可以看到 in 和 cs 都在 4w~6w ,pidstat 可以看到都是我们的服务线程产生的
为什么不直接换 JDK 验证
因为客户的生产环境用的华为平台,我们是上传 jar 吧,平台自动成容器镜像运行,华为的驻场工程师明确说了改不到 jdk 的版本。
https://i.imgur.com/Z4l37Go.jpg
https://i.imgur.com/tYdUjym.jpg