2015-03-09 11 views
7

क्या JVM के भीतर किसी दिए गए जावा थ्रेड के प्रारंभ समय को पुनर्प्राप्त करना संभव है?जावा थ्रेड प्रारंभ समय

मेरे पास थ्रेड डंप है और कुछ समस्याग्रस्त थ्रेड देख रहा हूं जो मैं समय के साथ एप्लिकेशन लॉग में एक विशिष्ट संचालन से संबंधित होना चाहता हूं।

उत्तर

1

हां, यदि आप लिनक्स पर ओरेकल जेडीके/ओपनजेडीके चला रहे हैं तो यह संभव है।

विचार मूल थ्रेड आईडी (टीआईडी) ढूंढना है और फिर /proc/JAVA_PID/task/TID छद्म फ़ाइल के संशोधन समय को देखें।

यदि आपके पास थ्रेड डंप है, तो यह छोटा है: मूल थ्रेड आईडी थ्रेड हेडर द्वारा मुद्रित किया जाएगा।

उदाहरण के लिए, जावा प्रक्रिया पीआईडी ​​2086. आप प्रकार

$ jstack 2086 

है और ब्याज की निम्नलिखित धागे से एक स्टैक ट्रेस मिलती है:

"Thread-26" prio=10 tid=0x00007f96c80c2800 nid=0x86a waiting on condition [0x00007f96c0ff2000] 
    java.lang.Thread.State: TIMED_WAITING (sleeping) 

कहाँ nid=0x86a देशी धागा आईडी है। 0x86a = 2154, ताकि आप प्रक्रिया को 2086 का कार्य 2154 एक्सप्लोर करना चाहते हैं:

$ ls -ld /proc/2086/task/2154 
dr-xr-xr-x 6 user user 0 Mar 10 23:12 /proc/2086/task/2154 
         ^^^^^^^^^^^^ 
         the thread start time 
+0

आपके इनपुट के लिए धन्यवाद। हालांकि मैं स्पष्टीकरण को समझ में नहीं आता हूं। मेरे पास थ्रेड डंप है। क्या प्रत्येक धागे के लिए एक टीआईडी ​​छद्म फ़ाइल है? यदि आप एक उदाहरण प्रदान कर सकते हैं, तो यह बहुत अच्छा होगा। –

+0

@bobdabelina मैंने एक उदाहरण के साथ जवाब अद्यतन किया है। – apangin

+0

बहुत बहुत धन्यवाद। यह बहुत उपयोगी है। –

4

जावा एपीआई में कोई विधि नहीं है जो आपको यह जानकारी प्रदान करती है। इसके अलावा, यह वैसे भी उपयोगी नहीं हो सकता है। थ्रेड पूल के मामले पर विचार करें जहां थ्रेड सृजन आवश्यक रूप से आवेदन-स्तर की घटनाओं से बंधे नहीं है।

यदि आप थ्रेड निर्माण के पूर्ण नियंत्रण में हैं, तो आप थ्रेड-स्थानीय चर को थ्रेड में संलग्न कर सकते हैं जो इसके निर्माण समय को रिकॉर्ड करता है।

+0

प्रतिक्रिया के लिए धन्यवाद का उपयोग कर प्रयास करें। मेरा मानना ​​है कि इन धागे को उपयोगकर्ता अनुरोधों द्वारा बुलाया जा रहा है। दुर्भाग्यवश मेरे पास इस समय कोड को संशोधित करने की क्षमता नहीं है और वर्तमान में उत्पादन पर जो भी चल रहा है उसके साथ काम करना है। –

+0

क्या वे एक कंटेनर द्वारा बनाए गए हैं (उदा। एक ऐप सर्वर) या आपका एप्लिकेशन कोड उन्हें बना रहा है? – amahfouz

+0

वे कंटेनर द्वारा बनाए जाते हैं। –

संबंधित मुद्दे