在Windows 2012 RT(x64)TEST服务器上,我们正在运行Tomcat 8安装,并且CPU使用率在达到峰值使用率的常规性方面令人不安.
安装我们的应用程序后,但在任何人访问它之前,会发生这种情况.我已经访问了几个页面并测试了一些功能,但没有任何可以创建我所知道的这种行为.
服务器上有2个虚拟处理器,每隔约20秒,CPU使用率将在一个处理Tomcat的处理器上达到100%,持续10秒(给予或接受).见下文:
模式的规律性向我表明在Tomcat 8的安装或设置中有些不正确.
我已经安装了YourKit Java Profiler(通过SO推荐),我希望能够解释导致这些峰值的原因,但是还没有看到线程启动的原因 - 至少部分是因为我的新意到YourKit.我确实将它附加到Tomcat启动文件,它似乎跟踪行为.
catalina日志在加标事件期间是静默的(就像我的应用程序日志一样)但是当我停止Tomcat时,有一些关于ThreadLocals的消息开始但无法删除然后:"...线程将随着时间的推移而更新尽量避免可能的内存泄漏."
我让服务器在周末运行,模式一直持续到今天,所以我不认为我的症状会消失.无论启动什么,现在只需每20秒启动一次这些线程(和/或YourKit)就消耗系统上所有可用的RAM .
什么是可能的方法来隔离这种异常的Tomcat活动,并希望停止或纠正它?
YourKit中有许多图表和标签,因此我不愿列出可能有用的所有内容.感谢您帮助我缩小了YourKit(或其他工具)可以为我提供的问题.
来自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
Run Code Online (Sandbox Code Playgroud)
在Gergely的请求下,该应用程序是DSpace的本地安装.它是一个带有Postgres SQL数据库后端的Java应用程序.我们从这里定制一个开源版本:http://www.dspace.org/introducing.我不确定还有什么可以提供帮助,我认为堆栈跟踪更多地揭示了什么是(并且没有)运行 - 见下文.
通过启用YourKit中的Stack Telemetry,可以通过将光标拖过一段Profiler历史记录来获得"CPU Estimation".对我来说,看起来所有CPU正在做的就是空转.Java文件是否在Tomcat例程下面如图?他们没有像DSpace那样打击我(尽管我不是专家)也不会看起来在CPU达到峰值时正在完成任何工作.
值得注意的是:在静默期间堆栈跟踪是相同的 - 唯一的区别是CPU时间(ms)是数百而不是数千毫秒.为了比下面的更直接的比较,hump在Thread.run()中表示~8,000ms,而静默期消耗~125ms的cpu时间(尽管覆盖大约相同的时间量).
最后,当请求应用程序的页面时,后续的代码分支出现在调用树中.如果它发生在尖峰期间,则可能只需要400毫秒的CPU时间来加载整页.出现的代码分支是ApplicationFilterChain.java,作为整个单独的分支以及PooledExecutor $ Worker.run() - 在层次结构中的java.lang.Thread.run()下面.
当试图解释堆栈跟踪时:EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run()
负责吗?
处理器峰值没有已知的相关活动
YourKit预先配置为隐藏某些java类名称模式,这些模式模糊了java.lang.Thread上的向下钻取.清除过滤器启用以下屏幕截图,显示峰值事件期间的绝大多数处理时间是通过调用以下3种方法:
我很抱歉还不了解Tomcat或DSpace以了解谁正在启动这些任务.(如果重要的是第一行正上方的那条线java.lang.Thread.run()
然后 …
我目前的开发过程是更改Java代码,mvn包,ant更新,重启我的tomcat服务器.我真的希望能够添加断点,并实时调试我的DSpace实例.我最近遇到了一个关于oceanlink代码的问题,想要调试,但不得不求助于println/log信息来查看变量.
我熟悉维基页面:https://wiki.duraspace.org/display/DSPACE/IDE+Integration+-+DSpace+and+IDEA
我只是想知道是否有更多关于这个主题的浓缩,最近的指导.
码:
/**
* Creates a
* cited document from the given bitstream of the given item. This
* requires that bitstream is contained in item.
* <p>
* The Process for adding a cover page is as follows:
* <ol>
* <li> Load source file into PdfReader and create a
* Document to put our cover page into.</li>
* <li> Create cover page and add content to it.</li>
* <li> Concatenate the coverpage and the source
* document.</li>
* </p> …
Run Code Online (Sandbox Code Playgroud) 作为我的DSpace实例的一部分,我有一个包含1200万使用情况统计记录的SOLR存储库.某些记录已通过多个SOLR升级进行迁移,并且不符合当前架构.其中500万条记录缺少我的架构中指定的唯一ID字段.
DSpace系统提供了一种机制,可使用以下代码将较旧的使用情况统计信息记录分片到单独的solr分片中.
DSPACE SHARD LOGIC:
for (File tempCsv : filesToUpload) {
//Upload the data in the csv files to our new solr core
ContentStreamUpdateRequest contentStreamUpdateRequest = new ContentStreamUpdateRequest("/update/csv");
contentStreamUpdateRequest.setParam("stream.contentType", "text/plain;charset=utf-8");
contentStreamUpdateRequest.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
contentStreamUpdateRequest.addFile(tempCsv, "text/plain;charset=utf-8");
statisticsYearServer.request(contentStreamUpdateRequest);
}
statisticsYearServer.commit(true, true);
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此过程时,我收到了一条错误消息,指出我的每条记录都缺少唯一的id字段,并且该过程丢弃了500万条记录.
我试图替换这500万条记录,以强制在每条记录上创建唯一的id字段.这是我正在运行以触发该更新的代码.查询myQuery迭代数千条记录的批次.
我的录音修复程序:
ArrayList<SolrInputDocument> idocs = new ArrayList<SolrInputDocument>();
SolrQuery sq = new SolrQuery();
sq.setQuery(myQuery);
sq.setRows(MAX);
sq.setSort("time", ORDER.asc);
QueryResponse resp = server.query(sq);
SolrDocumentList list = resp.getResults();
if (list.size() > 0) {
for(int i=0; i<list.size(); i++) {
SolrDocument doc = list.get(i);
SolrInputDocument idoc …
Run Code Online (Sandbox Code Playgroud) 我安装并正确配置了 dspace(我认为),当我使用 JSPUI 界面时,所有操作都可以完美运行。但是当我尝试使用 XMLUI 接口时,Tomcat 会返回以下异常。
老实说,我不知道发生了什么。如果你能帮助我。非常感谢!
我的服务器日志:
https://mega.nz/#F!M4VFBRrC!CFA_gT0YREm589CFELGHmw
Java堆栈跟踪:
java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.lang.String.charAt(Unknown Source)
at org.apache.catalina.loader.WebappClassLoaderBase.filter(WebappClassLoaderBase.java:2756)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1253)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1142)
at org.mozilla.javascript.Kit.classOrNull(Kit.java:88)
at org.mozilla.javascript.NativeJavaPackage.getPkgProperty(NativeJavaPackage.java:154)
at org.mozilla.javascript.NativeJavaPackage.get(NativeJavaPackage.java:105)
at org.mozilla.javascript.ScriptableObject.getProperty(ScriptableObject.java:1544)
at org.mozilla.javascript.ScriptRuntime.getObjectProp(ScriptRuntime.java:1375)
at org.mozilla.javascript.ScriptRuntime.getObjectProp(ScriptRuntime.java:1364)
at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:2965)
at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:2394)
at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:162)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2834)
at org.mozilla.javascript.InterpretedFunction.exec(InterpretedFunction.java:173)
at org.apache.cocoon.components.flow.javascript.fom.FOM_JavaScriptInterpreter.setupContext(FOM_JavaScriptInterpreter.java:465)
at org.apache.cocoon.components.flow.javascript.fom.FOM_JavaScriptInterpreter.callFunction(FOM_JavaScriptInterpreter.java:585)
at org.apache.cocoon.components.treeprocessor.sitemap.CallFunctionNode.invoke(CallFunctionNode.java:109)
at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:55)
at org.apache.cocoon.components.treeprocessor.sitemap.MatchNode.invoke(MatchNode.java:87)
at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:78)
at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:143)
at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:78)
at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:81)
at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:239)
at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.buildPipeline(ConcreteTreeProcessor.java:186)
at org.apache.cocoon.components.treeprocessor.TreeProcessor.buildPipeline(TreeProcessor.java:260)
at org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:107)
at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:78)
at …
Run Code Online (Sandbox Code Playgroud) 如果语言被切换,我想翻译我正在维护的DSPace实例中item-view.xsl中显示的主题(MeSH)术语.以前我使用下面的代码(我在XSLUtils.java
课堂上添加了这个代码)来查找Babelmesh网站并动态翻译它.
public static String lookupBabelMeSH(String term, String lang) {
try {
URLConnection babelMeshConn = (new URL("https://babelmesh.nlm.nih.gov/mesh_trans.php?oterm=" + URLEncoder.encode(term, "UTF-8") + "&in=ENG&out=" + lang)).openConnection();
babelMeshConn.setConnectTimeout(5000);
babelMeshConn.setReadTimeout(5000);
BufferedReader in = new BufferedReader(new InputStreamReader(babelMeshConn.getInputStream(), "UTF-8"));
String value = in.readLine();
in.close();
if (!StringUtils.isEmpty(value)) {
return value;
}
} catch (MalformedURLException mue) {
} catch (IOException ioe) {
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
然后我就这样使用它item-view.xsl
:
<xsl:choose>
<xsl:when test="$active-locale!='en'">
<xsl:variable name="current-locale">
<xsl:if test="$active-locale='fr'">
<xsl:text>FRE</xsl:text>
</xsl:if>
<xsl:if test="$active-locale='zh'">
<xsl:text>CHN</xsl:text>
</xsl:if>
</xsl:variable>
<xsl:variable name="translation">
<xsl:value-of select="util:lookupBabelMeSH(node(),$current-locale)"/> …
Run Code Online (Sandbox Code Playgroud) 我需要在存储库中将大约 4000 个项目设为私有。有没有办法使用 REST API 来做到这一点?
对于我拥有的项目数量来说,在 XMLUI 中编辑此项目并设为私有似乎不太可行。
我想在我的DSpace中添加"阿拉伯语".
我配置这个文件:
[dspace]/config/dspace.cfg
Run Code Online (Sandbox Code Playgroud)
用这一行:
webui.supported.locales = en, de, ar
Run Code Online (Sandbox Code Playgroud)
然后我构建Dspace并重新启动Tomcat.
但我找不到这个文件:
"Messages.properties" at
[dspace-src]/dspace/modules/jspui/src/main/resources/Messages.properties
Run Code Online (Sandbox Code Playgroud)
以及德语如何在我无法找到的DSpace上出现
"Messages_de.properties" at
[dspace-src]/dspace/modules/jspui/src/main/resources/Messages_de.properties
Run Code Online (Sandbox Code Playgroud)
用阿拉伯语自定义我的DSpace会有其他奇怪的问题吗?
我在我的电脑上安装了DSpace.我使用Mirage作为默认主题,现在我想为我的DSpace自定义它.我想更改CSS文件(重新设计),但我不知道正确设置自定义的步骤.我可以在[dspace]/webapps/themes/Mirage/lib/css/
文件夹中编辑我的CSS文件,但在重建DSpace后,它们将被删除.对已安装的主题进行自定义的正确方法是什么?我应该编辑CSS文件并将它们添加到[dspace-source]/dspace/modules/src/main/
文件夹然后重建我的webapps
?我已经阅读了有关该文件的官方文档,但我无法找到我的问题的正确答案.
我有一个XML解析,这对我来说真的很棘手.
<bundles>
<bundle>
<bitstreams>
<bitstream>
<id>1234</id>
</bitstream>
</bitstream>
<name>FOO</name>
</bundle>
<bundle> ... </bundle>
</bundles>
Run Code Online (Sandbox Code Playgroud)
我想通过这个XML迭代并找到所有的ID的内部数值比特流的包在名称元素的值是"富".我对任何未命名为"FOO"的捆绑包都不感兴趣,捆绑包中可能有任意数量的捆绑包和任意数量的比特流.
我一直在使用tree.findall('./bundle/name')
找到FOO捆绑包但这只返回一个我无法单步执行id值的列表:
for node in tree.findall('./bundle/name'):
if node.text == 'FOO':
id_values = tree.findall('./bundle/bitstreams/bitstream/id')
for value in id_values:
print value.text
Run Code Online (Sandbox Code Playgroud)
这将打印出所有 id值,而不是捆绑'FOO'的值.
我怎样才能通过此树遍历,找到包与名称 FOO,借此捆绑节点,收集ID嵌套在它的值?这里的XPath参数不正确吗?
我正在使用Python进行lxml
绑定 - 但我认为任何XML解析器都没问题; 这些不是大型的XML树.