Я провожу нагрузочное тестирование веб-приложения, развернутого в JBoss.Он запускается нормально, но по мере того, как тест набирает обороты, и все больше симулируемых пользователей начинают использовать JBoss, производительность резко падает:
Диаграмма времени Resposne http://i46.tinypic.com/2mob2f9.jpg
Подключив VisualVM к нему, я вижувсе потоки были в порядке, затем внезапно начали тратить большую часть своего времени на ожидание монитора (зеленый работает, красный - монитор, желтый - ожидание):
График состояния потока 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 ждут одного и того же монитора.Глядя на log4j.xml для WAR, он имеет одну настройку appender для CONSOLE.Я удаляю appender и пробую свой тест снова.Такое же поведение, за исключением того, что 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]
Что, черт возьми, происходит?Я использовал jstack в прошлом, и я пытался запустить его, когда все работает нормально и получил ожидаемые результаты.Я предполагаю, что jstack в порядке.Есть идеи, что может вызвать такое странное поведение?Любые идеи о том, куда идти отсюда?