在运行java程序时改变线程优先级?

时间:2014-05-08 11:41:22

标签: java linux multithreading

我在64核计算机上运行大型多线程java作业。该程序已经运行了几天,我想改变由java(而不是主线程)创建的一些线程的优先级,但不取消和重新启动程序,因为这将浪费大量时间和计算资源。

有没有办法在运行时从OS(linux)更改线程优先级?我知道linux中的renice命令可以重新整理整个过程,但我正在寻找一种方法来改变运行时创建的线程的优先级(这似乎不会发生在renice只能)。

1 个答案:

答案 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来更改线程优先级。

来源: