当前位置:首页 > 内存 > 正文

jvm内存调优案例

  • 内存
  • 2024-04-25 23:53:22
  • 5997

一、jvm内存调优用过哪些工具,jstate做什么用的?如何dump出当前线程状态示例1:等待锁定和阻塞
"RMTCPConnection(267865)-172.16.5.25"daemonprio=10tid=0x00007fd508371000nid=0x55aewaitingformonitorentry[0x00007fd4f8684000]
。状态:BLOCKED(onobjectmonitor)
penders()
-waitingtolock<0x00000000acf4d0c0>()
atorg。4j.类别。forcedLog()
()
()
()
说明:
1)线程状态为阻塞,阻塞状态。说明线程在等待资源时超时!
2)“waitingtolock<0x00000000acf4d0c0>”表示线程正在等待锁定0x00000000acf4d0c0地址(英文可以描述为:trytoobtain0x00000000acf4d0c0lock)。
3)在转储日志中查找字符串0x00000000acf4d0c0,发现大量线程正在等待锁定该地址。如果你能在日志中找到谁获得了这个锁(如locked<0x00000000acf4d0c0>),就可以顺着线索来。
4)“waitingformonitorentry”表示该线程已通过synchronized(obj){...}申请进入临界区,从而进入下图1中的“EntrySet”队列,但obj对应的monitor为被其他线程拥有,因此该线程正在EntrySet队列中等待。
5)第一行中,“RMTCPConnection(267865)-172.16.5.25”是ThreadName。tid指的是JavaThreadid。nid指本机线程的id。prio是线程优先级。[0x00007fd4f8684000]是线程堆栈起始地址。
示例2:Waitingoncondition和TIMED_WAITING
"RMITTCPConnection(idle)"daemonprio=10tid=0x00007fd50834e800nid=0x56b2waitingoncondition[0x00007fd4f1a59000]
:TIMED_WAITING(停车)
(NativeMethod)
-parkingtowaitfor<0x00000000acd84de8>(onousQueue$TransferStack)
。nos()
onousQueue$ulfill()
onousQueue$er()
()
k()
PoolExecutor$()
()
说明:
1)"TIMED_WAITING(parking)“timed_waiting”中的“)”指的是等待状态,但这里指定了时间,指定时间后会自动退出等待状态;停放是指线程被挂起。
2)“waitingoncondition”需要与堆栈中的“parkingtowaitfor<0x00000000acd84de8>(onousQueue$TransferStack)”结合使用。首先,这个线程必须等待某个条件发生才能唤醒自己。其次,SynchronousQueue不是一个队列,而是一种在线程之间传输信息的机制。当我们往SynchronousQueue中放入一个元素时,肯定有另一个线程在等待接受转移的任务,所以这就是这个线程等待的条件。
3)你看不到其他任何东西。

上一篇:jvm内存调优

下一篇:jvm扩大内存