why epoll consum sys usage,is normal?
fuyou
fuyou001 at gmail.com
Sun Oct 12 10:02:33 UTC 2014
when I profile java application,find the epoll consum lots of sys usage
step one :
I use systemtap script find the which thread consum cpu usgae,every second
display one ,find these thread
comm tid %user %kernel (of 15133 ticks)
java 27965 0.00% 7.11%
java 27743 0.00% 4.15%
java 28177 0.00% 3.35%
java 27902 0.00% 3.33%
java 27964 0.00% 3.23%
java 27929 0.00% 2.96%
java 28205 0.00% 2.95%
java 28203 0.00% 2.94%
java 27863 0.00% 2.93%
java 27581 0.00% 1.38%
java 27586 0.00% 1.24%
java 27588 0.00% 0.88%
java 27905 0.00% 0.77%
java 27954 0.00% 0.74%
java 27945 0.00% 0.73%
java 27911 0.00% 0.72%
java 27946 0.00% 0.72%
java 27910 0.00% 0.71%
java 27938 0.00% 0.70%
java 27962 0.00% 0.70%
comm tid %user %kernel (of 457 ticks)
java 27758 0.00% 11.15%
java 27742 0.00% 10.06%
java 27749 0.00% 9.84%
java 27756 0.00% 8.75%
java 27747 0.00% 8.31%
java 27752 0.00% 8.31%
java 27740 0.00% 6.34%
java 27734 0.00% 6.34%
java 27537 0.00% 3.06%
java 27965 0.00% 2.84%
java 27538 0.00% 2.18%
java 27743 0.00% 1.31%
java 27929 0.00% 1.31%
java 28203 0.00% 1.09%
java 27586 0.00% 1.09%
java 27902 0.00% 0.87%
java 27964 0.00% 0.87%
java 28177 0.00% 0.87%
java 28205 0.00% 0.65%
java 27868 0.00% 0.65%
comm tid %user %kernel (of 193 ticks)
java 27863 0.00% 8.80%
java 27965 0.00% 7.77%
java 27964 0.00% 6.21%
java 28177 0.00% 6.21%
java 28203 0.00% 5.18%
java 27929 0.00% 5.18%
java 28205 0.00% 4.14%
java 27902 0.00% 2.59%
java 27615 0.00% 2.59%
java 27590 0.00% 2.59%
java 27743 0.00% 1.55%
java 27762 0.00% 1.55%
java 27775 0.00% 1.55%
java 27776 0.00% 1.55%
java 27767 0.00% 1.55%
java 27794 0.00% 1.55%
java 27731 0.00% 1.55%
java 18362 0.00% 1.03%
java 27828 0.00% 1.03%
java 27747 0.00% 1.03%
step two :use jstack -l PID go get java stack
step three : change the thread id to hex and find stack in java stack file
the thread:
>>> print(hex(27965))
0x6d3d
>>> print(hex(27758))
0x6c6e
>>> print(hex(27863))
0x6cd7
>>> print(hex(27965))
0x6d3d
the jstacks
[~]$ cat jstack_27523_2.txt |grep --color -A10 --color 0x6c6e
"task-8" prio=10 tid=0x00007f76d7314000 nid=0x6c6e runnable [0x00000000471a0000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000076c5e9980> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:424)
at io.netty.util.concurrent.SingleThreadEventExecutor.takeTask(SingleThreadEventExecutor.java:235)
at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:34)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
at java.lang.Thread.run(Thread.java:662)
[ ~]$ cat jstack_27523_2.txt |grep --color -A10 --color 0x6cd7
"NETTYSERVER-WORKER-14-thread-1" prio=10 tid=0x00007f76d0052000
nid=0x6cd7 runnable [0x000000004da08000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:210)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:65)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
- locked <0x000000076c436e58> (a
io.netty.channel.nio.SelectedSelectionKeySet)
- locked <0x000000076c2f0990> (a java.util.Collections$UnmodifiableSet)
- locked <0x000000076c417140> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:618)
[~]$ cat jstack_27523_2.txt |grep --color -A10 --color 0x6d3d
"NETTYSERVER-WORKER-14-thread-5" prio=10 tid=0x00007f76d05fa000
nid=0x6d3d runnable [0x000000005204e000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:210)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:65)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
- locked <0x000000076c2f5a20> (a
io.netty.channel.nio.SelectedSelectionKeySet)
- locked <0x000000076c3c9688> (a java.util.Collections$UnmodifiableSet)
- locked <0x000000076c035a60> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:618)
I also use systemtap to monitor epoll call every seconds
pid | poll select epoll itimer futex nanosle signal| process
27523 | 0 0 380 0 10543 0 0| java
the os is
Red Hat Enterprise Linux Server release 5.7
2.6.32-el5.x86_64
the java verison
java version "1.6.0_32"
every seonds ,the epoll only 380 ervery seconds ,why epoll method consume
lots sys,is normal?
or
how to check it is normal consum sys cpu usgae?
thanks!
--
=============================================
fuyou001
Best Regards
More information about the core-libs-dev
mailing list