linux查询jvm中线程状态

1.查询linux下java相关进程

命令: ps -ef |grep java

ps -ef |grep java 
[root@bug-205 mms]# ps -ef | grep java #查询
root      4658   782  0 17:47 pts/3    00:00:00 grep --color=auto java
root     23321     1  0 11月10 ?      02:05:47 java -jar -Xms512m -Xmx512m -XX:+PrintGCDetails monitor-rest-3.0.jar --service.eureka.defaultZone=http://192.168.1.205:8761/eureka/
root     23395     1  0 11月10 ?      01:28:38 java -jar -Xms512m -Xmx512m -XX:+PrintGCDetails turbine-rest-3.0.jar --service.eureka.defaultZone=http://192.168.1.205:8761/eureka/

还有一个命令: jps -l

## 算了不贴了,你们自己 man jps 查看这个命令的相关参数吧
[root@bug-205 ~]# man jps
[root@bug-205 ~]# jps -l
30227 registry-3.0.jar
23395 turbine-rest-3.0.jar
6004 mms-client-1.0.0-SNAPSHOT.jar

->用来确认你的项目jar包名称对应的pid非常滴银性化

2.拿到进程id后查询所有线程状态 jstack pid

命令:jstack pid

jstack pid # 
[root@bug-205 mms]# jstack 32603(这个就是pid)
2021-12-13 17:48:21
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.161-b12 mixed mode):

"AsyncResolver-bootstrap-executor-0" #95 daemon prio=5 os_prio=0 tid=0x00007fc338002800 nid=0xd0c waiting on condition [0x00007fc32a9ec000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000007bdf57c70> (a java.util.concurrent.SynchronousQueue$TransferStack)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
	at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

3.java.lang.Thread.State: RUNNABLE 也可能是阻塞中

"RedisClearGroup-1" #83 prio=10 os_prio=0 tid=0x00007fd7c8055800 nid=0x4460 runnable [0x00007fd7bc7d1000]
   java.lang.Thread.State: RUNNABLE
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
	at java.net.SocketInputStream.read(SocketInputStream.java:171)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at java.net.SocketInputStream.read(SocketInputStream.java:127)
	at redis.clients.util.RedisInputStream.fill(RedisInputStream.java:109)
	at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:45)
	at redis.clients.jedis.Protocol.process(Protocol.java:129)
	at redis.clients.jedis.Protocol.read(Protocol.java:200)
	at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:285)
	at redis.clients.jedis.Connection.getBinaryBulkReply(Connection.java:204)
	at redis.clients.jedis.Connection.getBulkReply(Connection.java:193)
	at redis.clients.jedis.Jedis."rpop"(Jedis.java:1133) #你能看到这个玩意嘛
	at com.zhcs.bs.bus.task.job.clearRedis.RedisUtils.getDelKeyList(RedisUtils.java:283)
	at com.zhcs.bs.bus.task.job.clearRedis.RedisUtils.lambda$clearServerEveryDay$7(RedisUtils.java:325)

4.说明

线程阻塞后,分析对应方法,避免在同一个方法里面,或者同一个循环里面,又读又写,导致线程无期限的io等待
比如:A方法是线程安全的,B方法也是线程安全的,但是你写的C方法里面,同时调用了AB方法,在各种情况下,比如class字节码文件会优化改变你代码顺序,然后多个线程同时去执行AB方法,导致不可预期的结果,因此,为了避免这种问题,应当在操作时,将读与写有意识的分离开来.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值