Java 看似随机的tika性能问题

Java 看似随机的tika性能问题,java,rx-java,apache-tika,Java,Rx Java,Apache Tika,我使用RxJava将文档从源代码传输到tika,从tika传输到ElasticSearch 在某个时间点上,tika大约需要5分钟来索引文档,然后正常继续 我无法正确地指出原因:如果我重新启动应用程序,一切都是一样的,比如说上次在第301个文档中花了5分钟,那么在第301个文档中又会花5分钟。但是,如果我更改文档的顺序,它既不会发生在同一索引(301)中,也不会发生在同一文档中(之前的301) 以下是应用程序的相关部分: 公共可转位分析(可转位){ Timestamp from=新的时间戳(Sy

我使用RxJava将文档从源代码传输到tika,从tika传输到ElasticSearch

在某个时间点上,tika大约需要5分钟来索引文档,然后正常继续

我无法正确地指出原因:如果我重新启动应用程序,一切都是一样的,比如说上次在第301个文档中花了5分钟,那么在第301个文档中又会花5分钟。但是,如果我更改文档的顺序,它既不会发生在同一索引(301)中,也不会发生在同一文档中(之前的301)

以下是应用程序的相关部分:

公共可转位分析(可转位){
Timestamp from=新的时间戳(System.currentTimeMillis());
if(NCFile的可索引实例){
//这里有些代码没有效果
Metadata md=this.generateMetadata(((NCFile)indexable.getPath());
(NCFile)indexable.setType(md.get(“内容类型”);
if(((NCFile)indexable.getType().startsWith(“text/”)){
((NCFile)indexable.setContent(this.parseContent(((NCFile)indexable.getPath());//todo.hier könnte man noch viel mehr machen
}否则{
((NCFile)可索引).setContent(“”);
}
((NCFile)indexable.setType(this.detectMediaType)(((NCFile)indexable.getPath());
}
Timestamp to=新的时间戳(System.currentTimeMillis());
System.out.println(“文件”+((NCFile)indexable.getPath()+“接受”+(to.getTime()-from.getTime())+“ms to parse”);
返回可转位;
}
以及输入上述代码的管道:

nc.filter(action->action.getOperation()==Operation.INSERT)
.map(IndexingAction::getIndexable)
.subscribeOn(Schedulers.computation())
.map(indexableAction->metadataAnalyzer.analyze(indexableAction))
.map(可索引->{
插入索引器(可索引);
返回可转位;
})
.subscribeOn(Schedulers.io())
.map(indexable->“类”+indexable.getClass().getName()+“的可索引”+indexable.getIdentifier()+“已插入。”)
.subscribe(message->this.logger.log(Level.INFO,message));
我的猜测是,问题与内存或线程有关;但就我所见,代码应该工作得很好

the file Workspace/xx/xx-server/.test-documents/testRFC822_base64 took 5 ms to index
the file Workspace/xx/xx-server/.test-documents/testPagesHeadersFootersAlphaLower.pages took 306889 ms to index
the file Workspace/xx/xx-server/.test-documents/testFontAfterBufferedText.rtf took 2 ms to index
the file Workspace/xx/xx-server/.test-documents/testOPUS.opus took 7 ms to index
有趣的是,这些是他们回购协议中提供的tika测试文件

编辑: 在提出请求后,我使用FR进行了调查,但我不确定我到底要看什么:

平台刚过,它就停止工作,即使RAM和CPU都不满足限制

编辑2: 是PipedReader阻止了所有这些线程吗?我理解正确吗

编辑3:

这是一个1分钟的飞行记录:

注意:飞行记录似乎有误。在我的系统监视器应用程序中,我没有看到如此大的内存消耗(明显是16GB?!)


我做错了什么?

你能连接飞行记录器并查看代码的作用吗?高CPU使用率,高GC活动,当你看到慢文件时,记录1分钟,然后查看哪些热方法是热的。你是否使用默认的256MB内存运行?可能会将Xmx提高到1G?已经达到1G…@akarnokd添加了飞行记录。你可以连接飞行记录并查看代码的作用吗?高CPU使用率,高GC活动,当你看到慢文件时,记录1分钟,然后查看哪些热方法是热的。你是否使用默认的256MB内存运行?也许把Xmx提高到1G?已经是1G了…@akarnokd添加了飞行记录