【问题标题】:ElasticSearch - Inner lucene file deletion hangs foreverElasticSearch - 内部 lucene 文件删除永远挂起
【发布时间】:2021-10-15 13:55:15
【问题描述】:

几个月来,我一直在生产环境中使用 ElasticSearch 集群。 此集群包含 2 个节点,即 Windows Server 2019 服务器。

有时,这个集群的一个随机节点突然卡住了,直到我重新启动 ElasticService,这仅通过重新启动 windows 服务是不可能的。我需要终止该进程才能在之后重新启动它。

当我查看线程争用、调用 Elastic API 时,我得到了这个:

 0.0% (0s out of 500ms) cpu usage by thread 'threadDeathWatcher-2-1'
 10/10 snapshots sharing following 4 elements
   java.lang.Thread.sleep(Native Method)
   io.netty.util.ThreadDeathWatcher$Watcher.run(ThreadDeathWatcher.java:152)
   io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
   java.lang.Thread.run(Thread.java:748)

0.0% (0s out of 500ms) cpu usage by thread 'DestroyJavaVM'
 unique snapshot
 unique snapshot
 unique snapshot
 unique snapshot
 unique snapshot
 unique snapshot
 unique snapshot
 unique snapshot
 unique snapshot
 unique snapshot

0.0% (0s out of 500ms) cpu usage by thread 'elasticsearch[PRODUCTION_CRITQUE_2][refresh][T#1]'
 10/10 snapshots sharing following 27 elements
   sun.misc.Unsafe.park(Native Method)
   java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
   java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
   java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
   java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
   java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
   java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
   org.apache.lucene.search.ReferenceManager.maybeRefreshBlocking(ReferenceManager.java:251)
   org.elasticsearch.index.engine.InternalEngine.refresh(InternalEngine.java:910)
   org.elasticsearch.index.shard.IndexShard.refresh(IndexShard.java:632)
   org.elasticsearch.action.admin.indices.refresh.TransportShardRefreshAction.shardOperationOnReplica(TransportShardRefreshAction.java:65)
   org.elasticsearch.action.admin.indices.refresh.TransportShardRefreshAction.shardOperationOnReplica(TransportShardRefreshAction.java:38)
   org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncReplicaAction.onResponse(TransportReplicationAction.java:494)
   org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncReplicaAction.onResponse(TransportReplicationAction.java:467)
   org.elasticsearch.index.shard.IndexShardOperationsLock.acquire(IndexShardOperationsLock.java:147)
   org.elasticsearch.index.shard.IndexShard.acquireReplicaOperationLock(IndexShard.java:1673)
   org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncReplicaAction.doRun(TransportReplicationAction.java:566)
   org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
   org.elasticsearch.action.support.replication.TransportReplicationAction$ReplicaOperationTransportHandler.messageReceived(TransportReplicationAction.java:451)
   org.elasticsearch.action.support.replication.TransportReplicationAction$ReplicaOperationTransportHandler.messageReceived(TransportReplicationAction.java:441)
   org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69)
   org.elasticsearch.transport.TcpTransport$RequestHandler.doRun(TcpTransport.java:1544)
   org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:638)
   org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
   java.lang.Thread.run(Thread.java:748)

0.0% (0s out of 500ms) cpu usage by thread 'elasticsearch[PRODUCTION_CRITQUE_2][refresh][T#2]'
 10/10 snapshots sharing following 39 elements
   sun.nio.fs.WindowsNativeDispatcher.DeleteFile0(Native Method)
   sun.nio.fs.WindowsNativeDispatcher.DeleteFile(WindowsNativeDispatcher.java:114)
   sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:249)
   sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
   java.nio.file.Files.delete(Files.java:1126)
   org.apache.lucene.store.FSDirectory.privateDeleteFile(FSDirectory.java:373)
   org.apache.lucene.store.FSDirectory.deleteFile(FSDirectory.java:335)
   org.apache.lucene.store.FilterDirectory.deleteFile(FilterDirectory.java:62)
   org.apache.lucene.store.FilterDirectory.deleteFile(FilterDirectory.java:62)
   org.elasticsearch.index.store.Store$StoreDirectory.deleteFile(Store.java:700)
   org.elasticsearch.index.store.Store$StoreDirectory.deleteFile(Store.java:705)
   org.apache.lucene.store.LockValidatingDirectoryWrapper.deleteFile(LockValidatingDirectoryWrapper.java:38)
   org.apache.lucene.index.IndexFileDeleter.deleteFile(IndexFileDeleter.java:723)
   org.apache.lucene.index.IndexFileDeleter.deleteFiles(IndexFileDeleter.java:717)
   org.apache.lucene.index.IndexFileDeleter.deleteNewFiles(IndexFileDeleter.java:693)
   org.apache.lucene.index.IndexWriter.deleteNewFiles(IndexWriter.java:4965)
   org.apache.lucene.index.DocumentsWriter$DeleteNewFilesEvent.process(DocumentsWriter.java:771)
   org.apache.lucene.index.IndexWriter.processEvents(IndexWriter.java:5043)
   org.apache.lucene.index.IndexWriter.processEvents(IndexWriter.java:5034)
   org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:477)
   org.apache.lucene.index.StandardDirectoryReader.doOpenFromWriter(StandardDirectoryReader.java:291)
   org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:266)
   org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:256)
   org.apache.lucene.index.FilterDirectoryReader.doOpenIfChanged(FilterDirectoryReader.java:104)
   org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:140)
   org.apache.lucene.search.SearcherManager.refreshIfNeeded(SearcherManager.java:156)
   org.apache.lucene.search.SearcherManager.refreshIfNeeded(SearcherManager.java:58)
   org.apache.lucene.search.ReferenceManager.doMaybeRefresh(ReferenceManager.java:176)
   org.apache.lucene.search.ReferenceManager.maybeRefreshBlocking(ReferenceManager.java:253)
   org.elasticsearch.index.engine.InternalEngine.refresh(InternalEngine.java:910)
   org.elasticsearch.index.shard.IndexShard.refresh(IndexShard.java:632)
   org.elasticsearch.index.IndexService.maybeRefreshEngine(IndexService.java:690)
   org.elasticsearch.index.IndexService.access$400(IndexService.java:92)
   org.elasticsearch.index.IndexService$AsyncRefreshTask.runInternal(IndexService.java:832)
   org.elasticsearch.index.IndexService$BaseAsyncTask.run(IndexService.java:743)
   org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:569)
   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
   java.lang.Thread.run(Thread.java:748)

0.0% (0s out of 500ms) cpu usage by thread 'elasticsearch[PRODUCTION_CRITQUE_2][flush][T#4334]'
 10/10 snapshots sharing following 16 elements
   org.apache.lucene.index.IndexWriter.setLiveCommitData(IndexWriter.java:3116)
   org.elasticsearch.index.engine.InternalEngine.commitIndexWriter(InternalEngine.java:1562)
   org.elasticsearch.index.engine.InternalEngine.flush(InternalEngine.java:1063)
   org.elasticsearch.index.shard.IndexShard.flush(IndexShard.java:780)
   org.elasticsearch.indices.flush.SyncedFlushService.performPreSyncedFlush(SyncedFlushService.java:414)
   org.elasticsearch.indices.flush.SyncedFlushService.access$1000(SyncedFlushService.java:70)
   org.elasticsearch.indices.flush.SyncedFlushService$PreSyncedFlushTransportHandler.messageReceived(SyncedFlushService.java:696)
   org.elasticsearch.indices.flush.SyncedFlushService$PreSyncedFlushTransportHandler.messageReceived(SyncedFlushService.java:692)
   org.elasticsearch.transport.TransportRequestHandler.messageReceived(TransportRequestHandler.java:33)
   org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69)
   org.elasticsearch.transport.TcpTransport$RequestHandler.doRun(TcpTransport.java:1544)
   org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:638)
   org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
   java.lang.Thread.run(Thread.java:748)

似乎删除文件正在锁定(死锁?)弹性线程。我没有删除生产上的任何索引,所以我猜这是一个关于 Lucene 的内部 ElasticSearch 过程,当副本节点尝试与主节点同步时,它应该删除不再存在的 Lucene 段或类似的东西..

我尝试与 Elastic 开发团队交谈,但在他们看来,卡在删除文件上似乎是环境问题,而不是 Elastic 问题,这实际上是难以理解的。

我在这些服务器上停止了防病毒和备份过程,但仍然获得这些锁,至少每月一次。

内部Java“DeleteFile”如何挂起而不返回任何错误或其他东西。它只是永远挂起,服务器似乎没有同时承受压力。

如果有人遇到过这种问题,或者有想法帮助我调查,那就太棒了。

谢谢!

【问题讨论】:

  • 这两台机器是怎么连接的?也许其中一个失去了与另一个的通信,后来又回来了,因为您没有集群的奇数,这已成为一个问题。
  • 这实际上是我们的第一首曲目。在 ElasticSearch 日志上没有找到任何线索.. 我想如果一个节点与另一个节点失去通信(我们只有 2 个节点),我们应该找出一些关于那个的日志.. 从技术上讲,我不明白如何删除文件实际上可能永远挂起..

标签: java elasticsearch io lucene windows-server-2019


【解决方案1】:

看起来其他人正在经历这种情况:

https://discuss.elastic.co/t/massive-queue-in-refresh-thread-pool-on-a-single-node-causing-timeouts/280732/4

您是否查看过 Windows 事件查看器应用程序日志以查看是否有任何 Windows 进程提供任何见解?

看起来它正在尝试删除旧的索引文件。

org.elasticsearch.index.shard.IndexShard.refresh(IndexShard.java:632)

【讨论】:

  • 我还看到,如果您有另一个实例正在读取(锁定)试图删除的文件,则可能会出现问题。
  • 查看这个以找出哪个进程正在锁定文件,如果你能弄清楚它是哪个文件。 superuser.com/questions/117902/…
  • 我实际上是创建您提到的主题的人的一部分。我查看了 Windows 事件查看器中的所有事件,但似乎没有什么与我的问题明显相关。我同意,这看起来像是挂起删除旧索引或合并 Lucene 段。但是,一个低级的“DeleteFile”怎么会这样挂?我怎么能在 ElasticSearch 日志上有任何东西?这些都是我自己无法回答的问题......
  • 您发布的关于“查找锁定文件的进程”的链接的问题是我根本不知道哪个文件被锁定在这里..
  • 可能与系统负载有关吗?有没有办法模拟负载?
猜你喜欢
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 2011-09-27
相关资源
最近更新 更多