리눅스의 ps 명령어의 eLf와 lwp는 thread 정보를 구할 수 있다.
java에서 thread가 Future를 많이 쓰지 않는 경우, 즉, 계속 netty 또는 tomcat pool thread의 경우 cpu 를 많이 소진하는 thread 번호(10진수)를 얻어올 수 있다. 수치가 높을 수록 누적 cpu 소진이 많은 cpu를 의미한다.
$ ps -eLf -p 프로세스 넘버 |grep java |awk '{print $4,$7,$9}' | grep -v "00:00:00" |sort -k 4 -r |head -n 30
9750 18:21 00:00:03
9177 18:21 00:00:04
9176 18:21 00:00:04
9175 18:21 00:00:05
9174 18:21 00:00:05
9173 18:21 00:00:05
9172 18:21 00:00:04
9171 18:21 00:00:05
9170 18:21 00:00:04
9169 18:21 00:00:05
9168 18:21 00:00:05
9167 18:21 00:00:04
9166 18:21 00:00:04
9165 18:21 00:00:04
9164 18:21 00:00:05
9163 18:21 00:00:04
9162 18:21 00:00:04
9161 18:21 00:00:04
그러나, 위 명령어는 태생적인 한계가 있는데, Future를 사용하는 Thread는 잘 못 잡는 경우가 존재할 수 있다. 이 때는 갑자기 튀어 cpu 를 많이 소비하는 (튀는) thread 를 구할 때 유용하다.
$ ps -mo pcpu,lwp -p 프로세스 넘버 | awk '{if ($2 ~/[0-9]/) {print $2 " " $1""}}' | sort -k 2 -r | head -n 10
'unix and linux' 카테고리의 다른 글
[리눅스] 메모리 많이 사용하는 프로세스 찾기 (0) | 2014.12.23 |
---|---|
리눅스에서 cat, sed를 이용하여 동일 파일 수정하기 (input, output이 동일한 경우) (0) | 2014.12.22 |
strace grep 또는 파일 저장하기 (0) | 2014.11.28 |
Symbol not found: _SSLv2_client_method (LoadError) 해결 (0) | 2014.11.27 |
retransmission 확인하기 - netstat (0) | 2014.11.25 |