在Linux中,许多Java线程状态正在运行,但是它们的线程的父Java进程正在休眠。为什么?
例如,具有pid的Java进程为5197:
[root@ov7-ops-test-99 tmp]# ps -eo pid,s,lwp,command|grep activity
5197 S 5197 java -jar /opt/work/jenkins/workspace/.......
但状态为pid 5197的线程为:
[root@ov7-ops-test-99 tmp]# ps -eLo pid,lwp,s,%cpu,%mem,command|awk '/activity/ {if(index($3,"R")>0){print $1,$2,$3,$4,$8}}'
5197 5303 R 0.4 /opt/work/jenkins/workspace/....
5197 5563 R 0.5 /opt/work/jenkins/workspace/....
5197 7326 R 1.4 /opt/work/jenkins/workspace/....
5197 7330 R 1.4 /opt/work/jenkins/workspace/....
5197 7334 R 1.4 /opt/work/jenkins/workspace/....
5197 7338 R 1.4 /opt/work/jenkins/workspace/....
5197 7339 R 1.4 /opt/work/jenkins/workspace/....
5197 7340 R 1.4 /opt/work/jenkins/workspace/....
5197 7345 R 1.4 /opt/work/jenkins/workspace/....
5197 7346 R 1.4 /opt/work/jenkins/workspace/....
5197 7349 R 1.5 /opt/work/jenkins/workspace/....
5197 7357 R 1.4 /opt/work/jenkins/workspace/....
5197 7360 R 1.4 /opt/work/jenkins/workspace/....
5197 7365 R 1.4 /opt/work/jenkins/workspace/....
5197 7368 R 1.4 /opt/work/jenkins/workspace/....
5197 7369 R 1.4 /opt/work/jenkins/workspace/....
5197 7370 R 1.4 /opt/work/jenkins/workspace/....
答案 0 :(得分:1)
要么父线程启动了工作线程,然后进入睡眠状态,要么您正在观察后台工作。 5197
最有可能是main
线程,根据this answer,您可以通过运行jps -v
进行确认。
您的示例中没有足够的详细信息。您将必须查看Java线程名称,并将其与Jenkins源代码进行协调。看起来您正在处理Jenkins工作空间中的内部版本,在这种情况下,main
可能是代理启动代码,而正在运行的线程可能是工作线程。
以下代码会导致您观察到相同的过程状态:
public static void main(String[] args) throws Exception {
Thread t1 = new Thread(() -> {
int i = 0;
while (true) {
i++;
}
});
t1.start();
t1.join();
}