Performance 什么会导致Tomcat(v8)周期性地出现CPU峰值

Performance 什么会导致Tomcat(v8)周期性地出现CPU峰值,performance,tomcat,dspace,windows2012,yourkit,Performance,Tomcat,Dspace,Windows2012,Yourkit,在windows 2012 RT(x64)测试服务器上,我们正在运行Tomcat 8安装,CPU使用率经常达到峰值,这令人不安 该行为发生在安装应用程序之后,但在任何人访问该应用程序之前。我已经访问了一些页面并测试了一些功能,但据我所知,没有任何东西能够产生这种行为 服务器上有2个虚拟处理器,每20秒,CPU使用率(在运行Tomcat的一个处理器上)将达到100%,持续10秒(给定或获取)。见下文: 模式的规律性向我表明Tomcat 8的安装或设置中存在错误 我已经安装了YourKit Jav

在windows 2012 RT(x64)测试服务器上,我们正在运行Tomcat 8安装,CPU使用率经常达到峰值,这令人不安

该行为发生在安装应用程序之后,但在任何人访问该应用程序之前。我已经访问了一些页面并测试了一些功能,但据我所知,没有任何东西能够产生这种行为

服务器上有2个虚拟处理器,每20秒,CPU使用率(在运行Tomcat的一个处理器上)将达到100%,持续10秒(给定或获取)。见下文:

模式的规律性向我表明Tomcat 8的安装或设置中存在错误

我已经安装了YourKit Java Profiler(根据SO的建议),我希望它能够揭示导致这些尖峰的原因,但是我还没有看到线程开始的原因——至少部分原因是我对YourKit的陌生。我确实将它附加到Tomcat启动文件中,它似乎在跟踪行为

catalina日志在尖峰事件期间保持静默(就像我的应用程序日志一样),但当我停止Tomcat时,出现了一些关于ThreadLocals开始的消息,但无法删除,然后:“将随着时间的推移更新线程,以尝试避免可能的内存泄漏。”

我让服务器在周末运行,这种模式一直持续到今天,所以我认为我的症状不会消失。无论启动什么,只要每隔20秒启动这些线程(和/或您的工具包),系统上的所有可用RAM都会被消耗掉

什么是一种可能的方法来隔离这种异常的Tomcat活动,并希望停止或纠正它

您的工具包中有许多图表和选项卡,因此我不愿意列出所有可能有用的内容。谢谢你用你的工具(或其他工具)帮我缩小问题的范围

catalina日志中关于启动的信息:

Apache Tomcat/8.0.23
Architecture: amd64
Java Home: C:\Program Files\Java\jre1.8.0_65
CATALINA_BASE: C:\Program Files\Apache Software Foundation\Tomcat 8.0
2015-12-08更新 应Gergely的请求,该应用程序是DSpace的本地安装。这是一个带有PostgresSQL数据库后端的Java应用程序。我们正在从以下位置自定义它的开源版本:。我不确定还有什么能帮上忙,我认为堆栈跟踪更能揭示什么正在(和没有)运行——见下文

通过在YourKit中打开堆栈遥测,可以通过在探查器历史记录的一段时间内拖动光标来获得“CPU估算”。在我看来,CPU所做的一切都是在空转。下面的Java文件是Tomcat例程吗?在我看来,它们与DSpace无关(尽管我不是专家),在CPU达到峰值时,它们也不像是在做任何工作

值得注意的是:堆栈跟踪在安静期间是相同的——唯一的区别是CPU时间(ms)是数百毫秒而不是数千毫秒。为了进行比下面更直接的比较,在Thread.run()中,驼峰表示约8000毫秒,而静默期消耗约125毫秒的cpu时间(尽管覆盖的时间大致相同)

最后,当请求应用程序的页面时,调用树中会出现后续的代码分支。如果在峰值期间发生,则可能只需要400毫秒的CPU时间即可加载整个页面。出现的代码分支是ApplicationFilterChain.java,作为一个单独的分支,与PooledExecutor$Worker.run()一起出现——两者都位于层次结构中的java.lang.Thread.run()下面

尝试解释堆栈跟踪时:
EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run()是否负责

没有已知关联活动的处理器峰值

2015-12-08更新#2 YourKit预先配置为隐藏某些java类名模式,这些模式掩盖了对java.lang.Thread的深入研究。清除过滤器可启用以下屏幕截图,显示尖峰事件期间的绝大多数处理时间是通过调用以下3种方法实现的:

  • java.io.WinNTFileSystem.canonicalize0
  • java.io.WinNTFileSystem.getBooleanAttributes(infle.exists())
  • StardardRoot.java
很抱歉,我对Tomcat或DSpace的了解还不够,不知道是谁启动了这些任务。(如果有关系,第一行正上方的那一行是
java.lang.Thread.run()
,然后

不是明确的答案,但是注释太长了

在回顾了关于这个问题的最新情况并阅读了一些内容后,我怀疑这个反复出现的问题是由一个任务引起的。原因是:

  • 您获取的stacktrace清楚地表明,由DSpace库管理的WorkerThread(因此不必怪Tomcat)在这些时候正在使用处理器

  • 在阅读了一些关于DSpace本身的内容后,它似乎有一个功能,允许用户定义应该定期执行的

  • 除此之外,至少有一个任务是——根据文档,它是默认激活的,因此理论上可以有任意数量的任务默认激活

  • 此外,对话显示,至少每10秒激活一次策展任务


所有这些都指向同一个方向。我建议使用DSpace的UI(可能在管理模式下)查看并找到活动的策展任务,并验证其日程安排是否与您所观察到的相符。

感谢查看并回复此查询的人员。正如许多人所猜测的那样
<?xml version='1.0'?>
<Context docBase="E:/dspace/webapps/oai"
    reloadable="false"
    cachingAllowed="true"/>