6

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

 1 year ago
source link: https://www.v2ex.com/t/969080
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

我现在的问题

如何定位 java 程序执行时间长的原因?

现在的问题是有一个定时程序执行一遍需要 1500 分钟,我需要减少执行时间,

而这个程序代码量也很大(多线程去遍历,然后统计数据 导出数据 删除数据),那么现在需要去定位什么原因导致的,有没有优化空间

有什么可以定位问题的工具? 我晓得的有 JProfiler 和 Arthas 但是具体用哪个功能,感到很迷茫,有的功能还对线上有比较大的影响

目前有一个 600G 的 kvrocks 集群(一个基于硬盘的类似 redis 的服务),然后每天需要遍历所有内容(开了大概 150 个线程去跑,因为读取 kvrocks 数据需要等待 io,于是开的线程多一些),为了实现业务需求主要有几个操作

  1. 删除过期的数据
  2. 导出一些数据到文件
  3. 插入 MQ 一些数据

cpu 10 核 20 线程 两个 (因为机器还在跑别的程序,基本已经跑满了 这个程序占用 3486% cpu)

内存 256G (这个程序占用 64G -Xmx64G)

  1. 查看 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
  1. 我有想过用 jstack 看看执行到哪里,不过这个程序是个大循环,一直都是那些代码再跑,看了貌似也没啥用

  2. 我现在只能去读代码,这种我感觉并不是对症下药,就是靠经验以及靠猜,这并不是一个好的解决问题的方法,所以在此求助各位大佬


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK