Java 程序执行时间太长优化的问题,求大佬解答

user image 发现 ----- 2023-08-29 14:47:14
我现在的问题如何定位 java 程序执行时间长的原因?
现在的问题是有一个定时程序执行一遍需要 1500 分钟,我需要减少执行时间,
而这个程序代码量也很大(多线程去遍历,然后统计数据 导出数据 删除数据),那么现在需要去定位什么原因导致的,有没有优化空间
有什么可以定位问题的工具? 我晓得的有 JProfiler 和 Arthas 但是具体用哪个功能,感到很迷茫,有的功能还对线上有比较大的影响
程序逻辑目前有一个 600G 的 kvrocks 集群(一个基于硬盘的类似 redis 的服务),然后每天需要遍历所有内容(开了大概 150 个线程去跑,因为读取 kvrocks 数据需要等待 io,于是开的线程多一些),为了实现业务需求主要有几个操作
删除过期的数据导出一些数据到文件插入 MQ 一些数据机器配置cpu 10 核 20 线程 两个 (因为机器还在跑别的程序,基本已经跑满了 这个程序占用 3486% cpu)
内存 256G (这个程序占用 64G -Xmx64G)
我能做的查看 GC 情况,并没有 FGC,所以不是 FGC 导致的执行慢[root@*** ~]# jstat -gcutil 39822  S0     S1     E      O      M     CCS    YGC     YGCT     FGC    FGCT     CGC    CGCT       GCT  0.00  94.84  29.51  51.33  98.33  93.37  28468  1151.061     0     0.000    16     4.057  1155.118我有想过用 jstack 看看执行到哪里,不过这个程序是个大循环,一直都是那些代码再跑,看了貌似也没啥用
我现在只能去读代码,这种我感觉并不是对症下药,就是靠经验以及靠猜,这并不是一个好的解决问题的方法,所以在此求助各位大佬

使用说明