我正在 64 核计算机上运行大型多线程 java 作业。该程序已经运行了几天,我想更改java创建的一些线程(而不是主线程)的优先级,但不取消并重新启动程序,因为这会浪费大量时间和计算资源。
是否有任何方法可以在运行时从操作系统 (linux) 更改线程优先级?我知道 linux 中的 renice 命令可以 renice 整个进程,但我正在寻找一种方法来更改运行时创建的线程的优先级(这似乎不会仅在 renice 中发生) )。
最佳答案
这取决于您的 Java 和 Linux 版本,但您可以这样做:
对您的应用程序进行线程转储。首先用 jps
查找进程 ID,然后用 jstack
查找线程转储。
转储将包含nid
:
"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007f322001f800 nid=0x6bd3 runnable
这是线程的十六进制 PID。您可以使用 printf
将其转换为十进制:
printf "%d\n" 0x6bd3
这给了我们 27603。
您现在可以使用 renice
与此 PID 来更改线程优先级。
来源:
关于java - 改变运行java程序的线程优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23540729/