मैं जेबॉस में तैनात एक वेब ऐप पर कुछ लोड परीक्षण कर रहा हूं। यह ठीक शुरू होता है, लेकिन जैसा कि ऊपर परीक्षण रैंप और अधिक नकली उपयोगकर्ताओं JBoss मार शुरू, प्रदर्शन गंभीर रूप से खराब हो:जेबॉस धागे यादृच्छिक मॉनिटर पर इंतजार कर रहे हैं
Resposne time chart http://i46.tinypic.com/2mob2f9.jpg
इसे करने के लिए VisualVM कनेक्ट, मैं देख सकता धागे सब ठीक थे, तो अचानक खर्च करना शुरू कर दिया
Thread state graph http://i46.tinypic.com/105v6lk.jpg
jstack चल रहा है, मैं धागे एक ही स्थान इंतजार कर रहे हैं देखें:: अपना अधिकांश समय एक मॉनिटर के लिए इंतज़ार कर (हरा चल रहा है, लाल मॉनिटर है, पीले इंतजार है)
"http-0.0.0.0-8080-172" daemon prio=6 tid=0x000000005da90000 nid=0xd2c waiting for monitor entry [0x000000006cb4e000] java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.log4j.Category.callAppenders(Category.java:185) - waiting to lock (a org.apache.log4j.spi.RootCategory) at org.apache.log4j.Category.forcedLog(Category.java:372) at org.apache.log4j.Category.debug(Category.java:241) [my code]
~ 200 HTTP प्रोसेसर धागे अधिकांश मॉनीटर के लिए प्रतीक्षा कर रहे हैं। WAR के लिए log4j.xml को देखते हुए, इसमें CONSOLE के लिए एक एकल एपेंडर सेटअप है। मैं एपेंडर को हटाता हूं और फिर से अपना परीक्षण करने की कोशिश करता हूं। समान व्यवहार, jstack को छोड़कर सभी धागे एक अलग जगह में इंतज़ार कर पता चलता है:
"http-0.0.0.0-8080-251" daemon prio=6 tid=0x0000000059811800 nid=0x1108 waiting for monitor entry [0x0000000073ebe000] java.lang.Thread.State: BLOCKED (on object monitor) at java.util.Hashtable.get(Hashtable.java:333) - waiting to lock (a org.jboss.util.property.PropertyMap) at java.util.Properties.getProperty(Properties.java:932) at org.jboss.util.property.PropertyMap.getProperty(PropertyMap.java:626) at java.lang.System.getProperty(System.java:653) at org.jaxen.saxpath.helpers.XPathReaderFactory.createReader(XPathReaderFactory.java:109) at org.jaxen.BaseXPath.(BaseXPath.java:124) at org.jaxen.BaseXPath.(BaseXPath.java:153) at nu.xom.JaxenConnector.(JaxenConnector.java:49) at nu.xom.Node.query(Node.java:424) [my code]
कुछ भी नहीं बदल रहा है, मैं पुनः आरंभ JBoss, परीक्षण चलाने, तो jstack चलाने एक बार यह धीमी गति से हो जाता है। सभी धागे अभी तक एक अलग जगह में इंतजार कर रहे हैं:
"http-0.0.0.0-8080-171" daemon prio=6 tid=0x000000005d0d1000 nid=0x15d4 waiting for monitor entry [0x000000006cb4e000] java.lang.Thread.State: BLOCKED (on object monitor) at sun.nio.cs.FastCharsetProvider.charsetForName(FastCharsetProvider.java:118) - waiting to lock (a sun.nio.cs.StandardCharsets) at java.nio.charset.Charset.lookup2(Charset.java:449) at java.nio.charset.Charset.lookup(Charset.java:437) at java.nio.charset.Charset.isSupported(Charset.java:479) at sun.nio.cs.StreamDecoder.forInputStreamReader(StreamDecoder.java:49) at java.io.InputStreamReader.(InputStreamReader.java:57) at java.io.FileReader.(FileReader.java:41) [my code]
बिल्ली में क्या चल रहा है? मैंने अतीत में जेस्टैक का उपयोग किया है और जब चीजें ठीक चल रही हैं और अपेक्षित परिणाम मिलते हैं तो मैंने इसे चलाने की कोशिश की। मुझे लगता है कि जेस्टैक ठीक है। कोई विचार क्या अजीब व्यवहार का कारण बन सकता है? यहां से कहां जाना है इस पर कोई विचार?
अधिक संदर्भ/जानकारी के बिना, यह कहना मुश्किल है कि क्या हो रहा है। आम तौर पर, ऐसा लगता है कि विभिन्न संसाधनों और/या संभावित डेडलॉक स्थिति के लिए बहुत सारी विवाद है। आपके पहले चरण के रूप में, ऐसा लगता है जैसे आपने log4j के लिए कुछ विवाद हटा दिया है। कैशिंग क्वेरी परिणामों के कुछ संयोजन या डेटा संरचनाओं तक पहुंच को सिंक्रनाइज़ करने के द्वारा अन्य दो संसाधनों के लिए एक ही चीज़ करना संभव है जो डेडलॉक का कारण बन सकता है? – btreat
मुझे और जानकारी प्रदान करने में खुशी है, मुझे यकीन नहीं है कि क्या प्रदान करना है। अजीब बात यह है कि, हालांकि बहुत सारी विवाद है, धागे deadlocked नहीं हैं। वे 2 से 10+ सेकेंड के लिए मॉनीटर पर प्रतीक्षा करते हैं, फिर निष्पादन जारी रहता है, फिर मॉनीटर पर फिर से इंतजार करने के तुरंत बाद। कॉल बहुत बुनियादी हैं (उदाहरण के लिए System.getProperties) और इससे बचा नहीं जा सकता है। जेबॉस और अन्य तृतीय पक्ष कोड इन कॉल करते हैं। चूंकि मुझे पूरा यकीन है कि System.getProperties और हैशटेबल ठोस हैं, मेरा अगला सबसे अच्छा अनुमान यह है कि विवाद होने पर जेस्टैक भ्रामक है। यदि हां, तो मैं और कैसे निर्धारित कर सकता हूं कि विवाद कहाँ होता है? – NateS