2016-09-21 10 views
12

के बजाय एमबी या जीबी दिखाएं डिफ़ॉल्ट रूप से जावा जीसी लॉग आउटपुट KB (किलो बाइट्स) में मेमोरी विवरण दिखाता है। मुझे पता है कि यह मूर्खतापूर्ण लग सकता है, लेकिन अधिकांश जेवीएमएस के साथ मैं 20 से 40 जीबी के करीब ढेर आकारों को सौंपता हूं, मुझे लगता है कि यह जल्दी से केबी में संख्याओं को पढ़ने के लिए असुविधाजनक लगता है, खासकर जब पट्टी इत्यादि में लॉग स्कैन करना आदिजावा जीसी लॉग को KB

यह जावा प्रिंट एमबी या के भिन्न जीबी बजाय इन नंबर बनाने के लिए संभव है?

मैं JDK दस्तावेज में किसी भी विकल्प नहीं मिला।

यदि यह संभव नहीं है, वहाँ के आसपास कैसे एक जीसी प्रवेश करने के लिए इस सुविधा जोड़ने के बारे में जा सकते हैं किसी भी विचार कर रहे हैं? (नहीं बाहर से लेकिन JVM में साथ से)

आपकी मदद के लिए अग्रिम धन्यवाद।

उत्तर

0

मैं इस बात से परिचित नहीं हूँ, लेकिन मुझे पता है कि आप अपने आवेदन से जीसी प्रवेश करने की कोशिश कर सकते हैं। के बारे में पढ़ें GarbageCollectorMXBean, GarbageCollectionNotificationInfo और GcInfohttps://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/GcInfo.html

1

मान लीजिए कि आपके जीसी लॉग फ़ाइल है में: (./my-app-gc.log,)
फिर API आह्वान करने के लिए इस ऑनलाइन प्लगइन का उपयोग:

curl -X POST --data-binary @./my-app-gc.log http://api.gceasy.io/analyzeGC?apiKey= --header "Content-Type:text" 

या 3 सॉफ्टवेयर [PostMan]

इस का उपयोग सॉफ्टवेयर समर्थन:
enter image description here ........................................... ...........
| • - कंप्यूटर के लिए डाउनलोड करें: here |
| • - ब्राउज़र्स   के लिए डाउनलोड करें: here |
............................................ ......

PostMan प्लगइन उत्पादन का उदाहरण:

{ 
{ 
"isProblem": true, 
"problem": [ 
"122 times threads were stopped for more than 5 seconds" 
], 
"jvmHeapSize": { 
"youngGen": { 
    "allocatedSize": "7.5 gb", 
    "peakSize": "6 gb" 
}, 
"oldGen": { 
    "allocatedSize": "22.5 gb", 
    "peakSize": "22.5 gb" 
}, 
"metaSpace": { 
    "allocatedSize": "1.04 gb", 
    "peakSize": "48.52 mb" 
}, 
"total": { 
    "allocatedSize": "30 gb", 
    "peakSize": "28.5 gb" 
} 
}, 
"gcStatistics": { 
"totalCreatedBytes": "249.49 gb", 

डाटा का एक उपयोगी JSON प्रारूप बाद में इस्तेमाल किया जा सकता आप के लिए यह उत्पादन।

+0

या तृतीय पक्ष सेवा में अपना डेटा सबमिट करने के बजाय आप अपने कंप्यूटर पर जीसीवीयर एप्लिकेशन का उपयोग कर सकते हैं। – the8472

1

शायद आप अपने लॉग को दोबारा सुधारने के लिए सरल बैश प्रोग्राम बना सकते हैं?

मेरे उदाहरण में मुझे लगता है कि आप लिनक्स का उपयोग कर रहे हैं और आपके पास पथ पर ग्रोवी है।

/usr/bin में इस तरह की सामग्री के साथ फ़ाइल kb2mb बनाएँ: chmod +x /usr/bin/kb2mb:

#!/usr/bin/env groovy 

System.in.readLines().each{ 
    println(it.replaceAll(/\d+K/) { 
    (((it[0..-2] as Integer)/1024) as Double).round(2) + "M" 
    }) 
} 

तब निष्पादित करने के लिए कार्यक्रम की अनुमति देते हैं।

अंत में आप इस तरह इसे चलाने के लिए सक्षम हो सकता है:

cat gc.log|kb2mb 

उदाहरण आउटपुट:

2015-05-26T14: 45: 37.987-0200: 151.126: [जीसी (आबंटन विफलता) 151.126: [DefNew: 614.37M-> 68.25M (614.38M), ०.०५८४१५७ सेकेंड] 1581.39M-> 1243.41M (1979.75M), ०.०५८५००७ सेकेंड] [टाइम्स: उपयोगकर्ता = 0.06 sys = 0.00, अचल = 0.06 सेकेंड]

ग्रूवी के बजाय

, आप सह पाठ्यक्रम उपयोग बैश, अजगर आदि

7

इस को बदलने की कोई क्रम विकल्प है की uld, यह क्या विशेष कचरा कलेक्टर लॉगिंग डेटा मुद्रित करने के लिए उपयोग कर रहा है पर निर्भर करता है। JDK 8 में

G1 का प्रयोग करें, और यह उचित इकाइयों में प्रिंट होगा ढेर आकार के आधार पर:,

$ java -XX:+UseG1GC -verbose:gc 
[GC pause (Metadata GC Threshold) (young) (initial-mark) 592M->23M(100G), 0.0137879 secs] 

JDK 9 में अपग्रेड करें और फिर एकीकृत लॉगिंग उचित इकाइयों में मुद्रित होता है, ढेर आकार पर निर्भर करता है , सभी कलेक्टरों के लिए (प्लस, टाइमस्टैम्प भी उचित इकाइयों में हैं):

$ java -XX:+UseParallelGC -Xlog:gc 
[0.766s][info][gc] GC(0) Pause Young (Metadata GC Threshold) 4300M->15M(117760M) 6.765ms 
संबंधित मुद्दे