为什么我的Alfresco这么慢

时间:2015-03-13 09:20:43

标签: tomcat7 alfresco

情况

我有一个露天社区4.2.f安装在生产中。

它在x86_64机器上运行,其中包含linux RHEL 6.6。该机器具有16Gb RAM和12个内核。

Alfresco使用Java 64-bit 1.7.0_25-b15Tomcat 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本身有关,但我不知道为什么。

问题

可能是什么问题?

实现(jvm参数和db数据,2015-03-17)

爪哇

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。

它没有使用交换空间,也没有任何重大负载。

1 个答案:

答案 0 :(得分:0)

您最好检查这些锁的根本原因,检查更深层次的线程转储,以找出是否有某个库导致此问题。

根据我的经验,我看到另一个原因可能是一个庞大的垃圾收集,可以通过-Xmx增加来解决。

您机器的平均负载是多少?您使用的是哪个DB?你有哪些JVM设置?

此外,我可以向您指出关于Troubleshooting Tomcat

的这篇非常好的帖子

希望这会对你有所帮助。