2017-01-04 5 views
0

私はどのJavaスレッドがCPUを掘り出しているのか把握しようとしています。私は、スレッドのprocessidを理解したようスレッドプロセスIDを16進数形式に変換する

10634 user1+ 20 0 6911624 939456 28016 S 0.3 17.8 0:00.65 java 

は、JavaのスレッドのNID属性をマップする必要があります。私のトップの視点から私はこのLWPは17.8%で、ボトルネックであることを発見しましたダンプ:

"RMI Scheduler(0)" #209 daemon prio=9 os_prio=0 tid=0x00007fe71c18a800 nid=0x2c78 waiting on condition [0x00007fe6d35a5000] 
"RMI TCP Accept-0" #207 daemon prio=9 os_prio=0 tid=0x00007fe714106000 nid=0x2c74 runnable [0x00007fe6d1f84000] 
"Attach Listener" #206 daemon prio=9 os_prio=0 tid=0x00007fe7301ab800 nid=0x2a98 waiting on condition [0x0000000000000000] 
"ServerService Thread Pool -- 67" #205 prio=5 os_prio=0 tid=0x00007fe74c126000 nid=0x2a49 waiting on condition [0x00007fe6d38a8000] 
"Thread-94" #202 daemon prio=5 os_prio=0 tid=0x00007fe70c0c7800 nid=0x2a43 runnable [0x00007fe6ce995000] 
"Weld Thread Pool -- 5" #192 prio=5 os_prio=0 tid=0x00007fe6f8116000 nid=0x2a32 waiting on condition [0x00007fe6ced97000] 
. . . . . . . . 

しかし、六角に10640を変換すると、有効な一致を生成しません:

printf -v result1 "%x" "10640" 
$ echo $result1 
2990 

pid(10634)をnid属性で表示されているように有効な16進値に変換できますか? おかげで実際に

+0

'nid'は、* Process * IDではなく、ネイティブOS * Thread * IDです。 * top *にはプロセスを表す行が1行しかありません。スレッドダンプには多くの行がありますが、明らかにスレッドを表しています。 – Andreas

答えて

3

、2990年は(10進数)の16進数表現である10640.はたぶん、あなただけの完全性のために

$ printf -v result1 0x%x 10640 
$ echo $result1 
0x2990 

$ printf 0x%x 11340 
0x2c4c 

C/Javaの/ Pythonの表記と一致するために0x接頭辞をしたい:あなたが見ることができますthis question with its answersで、Linux上のプロセスによって生成されたネイティブスレッドIDを見つける方法を学んでください。

+0

彼は変換された16進数をJavaスレッドのダンプで 'nid'にマッチさせたいと考えています。例えば。 10634(DEC)= 0x298a(HEX)ですが、一致を見つけることはできません。 – Kent

+0

ありがとう!私は疑わしいスレッドを見つけることができた! – Carla

関連する問題