V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Lighfer
V2EX  ›  Java

大佬们,请教一下关于 JDK-8075484 这个 bug 的问题

  •  
  •   Lighfer · 2023-10-11 08:33:47 +08:00 · 2299 次点击
    这是一个创建于 407 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    近期用户的生产环境下遇到一个很神奇的问题,并发数起来( 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 说的都是直接卡,我们遇到的情况是偶尔慢,但不会卡住不返回

    求助

    找了一天多了没有其他思路来排查这个问题了,想请教以下两个问题:

    1. JDK-8075484 这个 bug 是否有老哥遇到过是慢而不是卡住?
    2. 各位老哥有什么思路可以继续排查吗?

    环境信息

    系统:华为欧拉 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

    12 条回复    2023-10-11 19:58:55 +08:00
    devopsdogdog
        1
    devopsdogdog  
       2023-10-11 09:02:39 +08:00   ❤️ 1
    1. 数据库最大连接数?
    2. 单机的话,网络参数是否有调优
    3. 驻场的话 不要信。开个 1 两天 慢 sql 记录 ,对吧程序和数据库的执行时间
    devopsdogdog
        2
    devopsdogdog  
       2023-10-11 09:04:53 +08:00
    补一点 k8s dns 解析慢导致。
    impossibleshen
        3
    impossibleshen  
       2023-10-11 09:34:18 +08:00   ❤️ 2
    华为驻场的话不要信,自己记录一下,多半是华为的问题;
    以前信创还遇到过用华为 os 莫名其妙杀进程,换成 debain 屁事儿没有,稳定运行
    nothingistrue
        4
    nothingistrue  
       2023-10-11 10:02:56 +08:00   ❤️ 1
    具体情况不是很了解。但并发量起来后才变慢、变慢但是最终会完成、跟踪到执行 SQL 阶段慢的背景,看起来很像是数据库单点阻塞,应该先从数据库那里找问题。此外,这里是用 PG 的 JDBC 驱动去连接 PG 的衍生数据库,JDBC 驱动兼容性上也可能有问题。
    nothingistrue
        5
    nothingistrue  
       2023-10-11 10:07:31 +08:00   ❤️ 2
    可以先写个脚本,用 GaussDB 的原生连接方式,高并发的去 select 'x' ,比较一下用 PG JDBC 驱动连接方式高并发 select 'x' 的情况。如果一样,那就只是数据库的问题,交给华为去处理。如果明显不一样,那就很有可能是 JDBC 驱动的问题,还是交给华为去处理,因为 JDBC 驱动是数据库厂商负责的。
    sujin190
        6
    sujin190  
       2023-10-11 10:12:13 +08:00   ❤️ 1
    如果 jdk 的 Socket 有 bug 那么你 http 请求也会有问题吧,搞个没数据库的查询监控下就能知道吧,如果只是数据库查询有问题 http 请求没问题那很大概率就不是 jdk 的问题了,看你这个是卡在了最底层的 socket read 了,那么要么就是真的数据库查询慢,或者就是网络配置有问题了,但如果网络配置有问题提的话一般就算低谷是并发不高也会偶现的,不会只在并发高时出现吧,这个也监控分析下看看呗

    话说虽然不能改 jdk 版本,但是 postgresql 的 driver 应该项目引入的吧,或许也可以升级新版本试试,你刚才提到的那个 issue 用的是 42.2.5 落后不少版本了

    @devopsdogdog #2 socket connect 已经连接成功的话就不是 dns 的问题了
    Lighfer
        7
    Lighfer  
    OP
       2023-10-11 10:39:18 +08:00
    @devopsdogdog 感谢老哥提供思路,数据库连接数很足,目前根据 arthas 已经确定就是 sql 发出去等响应这个过程慢,操作系统的东西我们没有权限改,所以就很尴尬,驻场是让他们当场抓慢 SQL 的,他们说没有,虽然我也还是怀疑= =
    Lighfer
        8
    Lighfer  
    OP
       2023-10-11 10:39:56 +08:00
    @nothingistrue 感谢老哥提供思路,我们正在出 demo 了,看看能不能稳定复现
    Lighfer
        9
    Lighfer  
    OP
       2023-10-11 10:43:52 +08:00
    @sujin190 感谢老哥,http 请求我们也想办法监控一下,之前没没有联想到如果是 jdk 的问题,http 也应该一起慢
    Pantheoon
        10
    Pantheoon  
       2023-10-11 12:44:38 +08:00   ❤️ 2
    大概率 GaussDB 的 bug
    arloor
        11
    arloor  
       2023-10-11 16:07:46 +08:00   ❤️ 1
    @Lighfer jdbc 用的 socket 是 java.net 包下的 BIO ,验证 HTTP 的时候,要看下是不是用 BIO ,如果用的 NIO 的 SocketChannel 那种就不是一回事了。
    Lighfer
        12
    Lighfer  
    OP
       2023-10-11 19:58:55 +08:00 via iPhone
    @devopsdogdog
    @impossibleshen
    @nothingistrue
    @sujin190
    @Pantheoon
    @arloor
    感谢各位老哥帮助,已经确定不是程序问题也不是 jdk 的问题了,目前在华为的环境下可以稳定复现每隔 63.8 秒左右就一定会有出现数据库查询慢,即使是简单的 select 1 也是,即使不使用 java 而是其他数据库工具也会,具体是高斯数据库的问题还是他们私有云平台的问题就让他们排查去了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1955 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:16 · PVG 00:16 · LAX 08:16 · JFK 11:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.