我有一个露天社区4.2.f安装在生产中。
它在x86_64
机器上运行,其中包含linux RHEL 6.6
。该机器具有16Gb RAM和12个内核。
Alfresco使用Java 64-bit 1.7.0_25-b15
和Tomcat 7.0.52
。
Alfresco每两三天变得很慢。没有任何明显的原因。
我已经看到日志和tomcat接受请求但冻结了几秒钟然后继续正常运行。处理/提交时间大约是15ms,尽管响应确实需要大约10秒。
看jstack -F prc_id
我明白了:
Thread 27669: (state = BLOCKED)
- sun.misc.Unsafe.park(boolean, long) @bci=0 (Interpreted frame)
- java.util.concurrent.locks.LockSupport.parkNanos(java.lang.Object, long) @bci=20, line=226 (Compiled frame)
- java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(long) @bci=68, line=2082 (Compiled frame)
- java.util.concurrent.LinkedBlockingQueue.poll(long, java.util.concurrent.TimeUnit) @bci=62, line=467 (Compiled frame)
- org.apache.tomcat.util.threads.TaskQueue.poll(long, java.util.concurrent.TimeUnit) @bci=3, line=86 (Interpreted frame)
- org.apache.tomcat.util.threads.TaskQueue.poll(long, java.util.concurrent.TimeUnit) @bci=3, line=32 (Interpreted frame)
- java.util.concurrent.ThreadPoolExecutor.getTask() @bci=141, line=1068 (Interpreted frame)
- java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) @bci=26, line=1130 (Compiled frame)
- java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=5, line=615 (Interpreted frame)
- java.lang.Thread.run() @bci=11, line=724 (Interpreted frame)
Thread 27668: (state = BLOCKED)
- sun.misc.Unsafe.park(boolean, long) @bci=0 (Interpreted frame)
- java.util.concurrent.locks.LockSupport.parkNanos(java.lang.Object, long) @bci=20, line=226 (Compiled frame)
- java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(long) @bci=68, line=2082 (Compiled frame)
- java.util.concurrent.LinkedBlockingQueue.poll(long, java.util.concurrent.TimeUnit) @bci=62, line=467 (Compiled frame)
- org.apache.tomcat.util.threads.TaskQueue.poll(long, java.util.concurrent.TimeUnit) @bci=3, line=86 (Interpreted frame)
- org.apache.tomcat.util.threads.TaskQueue.poll(long, java.util.concurrent.TimeUnit) @bci=3, line=32 (Interpreted frame)
- java.util.concurrent.ThreadPoolExecutor.getTask() @bci=141, line=1068 (Interpreted frame)
- java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) @bci=26, line=1130 (Compiled frame)
- java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=5, line=615 (Interpreted frame)
- java.lang.Thread.run() @bci=11, line=724 (Interpreted frame)
线程BLOCKED
非常多,而且它们与org.apache.tomcat.util.threads.TaskQueue.poll
类相关。
我认为这个问题与Tomcat本身有关,但我不知道为什么。
可能是什么问题?
java进程是:
/opt/alfresco-4.2.f/java/bin/java -Djava.util.logging.config.file=/opt/alfresco-4.2.f/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms6g -Xmx11g -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseParallelOldGC -server -Dalfresco.home=/opt/alfresco-4.2.f -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=palfresco.dipalme.org -Dsun.security.ssl.allowUnsafeRenegotiation=true -Djava.endorsed.dirs=/opt/alfresco-4.2.f/tomcat/endorsed -classpath /opt/alfresco-4.2.f/tomcat/bin/bootstrap.jar:/opt/alfresco-4.2.f/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/alfresco-4.2.f/tomcat -Dcatalina.home=/opt/alfresco-4.2.f/tomcat -Djava.io.tmpdir=/opt/alfresco-4.2.f/tomcat/temp
Java paraters:
-Xms6g
-Xmx11g
-XX:PermSize=256m
-XX:MaxPermSize=512m
-XX:+UseParallelOldGC
-server
该数据库是Debian IBM LPAR Power7机器中的PostgresSQL 9.1,具有2Gb RAM和2个CPU。
它没有使用交换空间,也没有任何重大负载。
答案 0 :(得分:0)
您最好检查这些锁的根本原因,检查更深层次的线程转储,以找出是否有某个库导致此问题。
根据我的经验,我看到另一个原因可能是一个庞大的垃圾收集,可以通过-Xmx增加来解决。
您机器的平均负载是多少?您使用的是哪个DB?你有哪些JVM设置?
此外,我可以向您指出关于Troubleshooting Tomcat
的这篇非常好的帖子希望这会对你有所帮助。