我在64核计算机上运行大型多线程java作业。该程序已经运行了几天,我想改变由java(而不是主线程)创建的一些线程的优先级,但不取消和重新启动程序,因为这将浪费大量时间和计算资源。
有没有办法在运行时从OS(linux)更改线程优先级?我知道linux中的renice
命令可以重新整理整个过程,但我正在寻找一种方法来改变运行时创建的线程的优先级(这似乎不会发生在renice只能)。
答案 0 :(得分:2)
这取决于您的Java和Linux版本,但您可以这样做:
进行应用程序的线程转储。首先jps
找到进程ID,然后jstack
进行线程转储。
转储将包含nid
s:
"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007f322001f800 nid=0x6bd3 runnable
这是十六进制的线程的PID。您可以使用printf
将其转换为十进制:
printf "%d\n" 0x6bd3
给了我们27603。
现在可以使用此renice
来更改线程优先级。
来源: