java - 改变运行java程序的线程优先级?

标签 java linux multithreading

我正在 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/

相关文章:

java - Resteasy 中 getPathParameters 和 getQueryParameters 方法的替代品是什么?

java - 比较运算符自定义对象java

linux - Bash:如何为 ssh 命令实时过滤 tee 输出?

c - 使用curl c选项发布Soap用户名和密码 header

java - 如何在 Hibernate 中使用临时表批量删除记录?

java - 在没有 PropertyModel 的情况下将数据保存在 Wicket 中

带有 shell 提示符的 python 命令行界面

java - 在 Jetty 关闭期间执行停止线程的方法

c# - 我的计时器事件崩溃,因为事件是在不同的线程上调用的

java - 为什么有时在 Maven 中测试期间 public static AtomicBoolean 变量为 false?