You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@phoenix.apache.org by "Daniel Wong (Jira)" <ji...@apache.org> on 2021/10/08 19:13:00 UTC
[jira] [Commented] (PHOENIX-6571) Hang of connections after
OutOfMemoryError
[ https://issues.apache.org/jira/browse/PHOENIX-6571?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17426343#comment-17426343 ]
Daniel Wong commented on PHOENIX-6571:
--------------------------------------
Please attach the logs to the issue directly. Can you take a heapdump or setup for a hprof and understand what objects are leaking? Examples we have seen in the past include ZK thread leak, Phoenix regionInfos etc.
> Hang of connections after OutOfMemoryError
> -------------------------------------------
>
> Key: PHOENIX-6571
> URL: https://issues.apache.org/jira/browse/PHOENIX-6571
> Project: Phoenix
> Issue Type: Bug
> Components: core
> Affects Versions: 4.16.1
> Reporter: Aleksey Stavrov
> Priority: Major
>
> We often have connection hangs after OOM. Hangs often occur on locks.
> I made a test case locally that reproduces this problem, but I don't know Java, so I have a complex bundle (perl -> dbd_jdbc -> hbase/phoenix) to use phoenix, so because of this i am not showing a minimal example to reproduce this behavior.
> Here is the error log shown by dbd_jdbc: [https://pastebin.com/sHcH2iVq]
> After the OOM happened, all connections to dbd_jdbc hang and very often have such a stack trace:
> {noformat}
> "Thread-18" #197 prio=5 os_prio=0 cpu=21.70ms elapsed=1822.79s tid=0x00007ffaa4124800 nid=0x1c84 waiting on condition [0x00007ff9c0ecc000]
> java.lang.Thread.State: WAITING (parking)
> at jdk.internal.misc.Unsafe.park(java.base@11.0.12/Native Method)
> - parking to wait for <0x00000000f82e9998> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
> at java.util.concurrent.locks.LockSupport.park(java.base@11.0.12/LockSupport.java:194)
> at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(java.base@11.0.12/AbstractQueuedSynchronizer.java:885)
> at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(java.base@11.0.12/AbstractQueuedSynchronizer.java:917)
> at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@11.0.12/AbstractQueuedSynchronizer.java:1240)
> at java.util.concurrent.locks.ReentrantLock.lock(java.base@11.0.12/ReentrantLock.java:267)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegionInMeta(ConnectionManager.java:1326)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1230)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1214)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1171)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getRegionLocation(ConnectionManager.java:1003)
> at org.apache.hadoop.hbase.client.HRegionLocator.getRegionLocation(HRegionLocator.java:80)
> at org.apache.hadoop.hbase.client.HTable.getRegionLocation(HTable.java:519)
> at org.apache.hadoop.hbase.client.HTable.getKeysAndRegionsInRange(HTable.java:735)
> at org.apache.hadoop.hbase.client.HTable.getKeysAndRegionsInRange(HTable.java:705)
> at org.apache.hadoop.hbase.client.HTable.getStartKeysInRange(HTable.java:1808)
> at org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1763)
> at org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1743)
> at org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1769)
> at org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1749)
> at org.apache.phoenix.query.ConnectionQueryServicesImpl.getTable(ConnectionQueryServicesImpl.java:1996)
> at org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:657)
> at org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:545)
> at org.apache.phoenix.compile.FromCompiler$BaseColumnResolver.createTableRef(FromCompiler.java:772)
> at org.apache.phoenix.compile.FromCompiler$SingleTableColumnResolver.<init>(FromCompiler.java:442)
> at org.apache.phoenix.compile.FromCompiler.getResolverForQuery(FromCompiler.java:227)
> at org.apache.phoenix.compile.FromCompiler.getResolverForQuery(FromCompiler.java:205)
> at org.apache.phoenix.util.ParseNodeUtil.rewrite(ParseNodeUtil.java:177)
> at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:489)
> at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:462)
> at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:304)
> at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:293)
> at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:292)
> at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:285)
> at org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:176)
> at org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:183)
> at com.vizdom.dbd.jdbc.Connection.handleRequest(Connection.java:744)
> at com.vizdom.dbd.jdbc.Connection.run(Connection.java:233)
> at java.lang.Thread.run(java.base@11.0.12/Thread.java:829)
> {noformat}
> But sometimes after such exception
> {noformat}
> Exception in thread "IPC Client (55674532) connection to bca736ff9b7d/172.17.0.2:35469 from root" java.lang.OutOfMemoryError: Java heap space
> 21/10/08 09:19:53 [Thread-0-SendThread(127.0.0.1:2181)] WARN server.ZooKeeperThread: Exception occurred from thread Thread-0-SendThread(127.0.0.1:2181)
> java.lang.OutOfMemoryError: Java heap space
> {noformat}
> we have such stacktrace:
> {noformat}
> Thread-15" #146 prio=5 os_prio=0 cpu=2.06ms elapsed=190.12s tid=0x00007f130c110000 nid=0x1a1a in Object.wait() [0x00007f11eefe9000]
> java.lang.Thread.State: WAITING (on object monitor)
> at java.lang.Object.wait(java.base@11.0.12/Native Method)
> - waiting on <no object reference available>
> at java.lang.Object.wait(java.base@11.0.12/Object.java:328)
> at org.apache.phoenix.shaded.org.apache.zookeeper.ClientCnxn.submitRequest(ClientCnxn.java:1406)
> - waiting to re-lock in wait() <0x00000000ff6e4d98> (a org.apache.phoenix.shaded.org.apache.zookeeper.ClientCnxn$Packet)
> at org.apache.phoenix.shaded.org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:1210)
> at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.getData(RecoverableZooKeeper.java:354)
> at org.apache.hadoop.hbase.zookeeper.ZKUtil.getData(ZKUtil.java:629)
> at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.getMetaRegionState(MetaTableLocator.java:487)
> at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.getMetaRegionLocation(MetaTableLocator.java:168)
> at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.blockUntilAvailable(MetaTableLocator.java:607)
> at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.blockUntilAvailable(MetaTableLocator.java:588)
> at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.blockUntilAvailable(MetaTableLocator.java:561)
> at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getMetaRegionLocation(ZooKeeperRegistry.java:61)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateMeta(ConnectionManager.java:1266)
> - locked <0x00000000f73ea510> (a java.lang.Object)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1227)
> at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:356)
> at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:153)
> at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:58)
> at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:219)
> at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:275)
> at org.apache.hadoop.hbase.client.ClientScanner.loadCache(ClientScanner.java:436)
> at org.apache.hadoop.hbase.client.ClientScanner.next(ClientScanner.java:310)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegionInMeta(ConnectionManager.java:1341)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1230)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1214)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1171)
> at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getRegionLocation(ConnectionManager.java:1003)
> at org.apache.hadoop.hbase.client.HRegionLocator.getRegionLocation(HRegionLocator.java:80)
> at org.apache.hadoop.hbase.client.HTable.getRegionLocation(HTable.java:519)
> at org.apache.hadoop.hbase.client.HTable.getKeysAndRegionsInRange(HTable.java:735)
> at org.apache.hadoop.hbase.client.HTable.getKeysAndRegionsInRange(HTable.java:705)
> at org.apache.hadoop.hbase.client.HTable.getStartKeysInRange(HTable.java:1808)
> at org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1763)
> at org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1743)
> at org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1769)
> at org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1749)
> at org.apache.phoenix.query.ConnectionQueryServicesImpl.getTable(ConnectionQueryServicesImpl.java:1996)
> at org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:657)
> at org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:545)
> at org.apache.phoenix.compile.FromCompiler$BaseColumnResolver.createTableRef(FromCompiler.java:772)
> at org.apache.phoenix.compile.FromCompiler$SingleTableColumnResolver.<init>(FromCompiler.java:442)
> at org.apache.phoenix.compile.FromCompiler.getResolverForQuery(FromCompiler.java:227)
> at org.apache.phoenix.compile.FromCompiler.getResolverForQuery(FromCompiler.java:205)
> at org.apache.phoenix.util.ParseNodeUtil.rewrite(ParseNodeUtil.java:177)
> at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:489)
> at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:462)
> at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:304)
> at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:293)
> at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:292)
> at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:285)
> at org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:176)
> at org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:183)
> at com.vizdom.dbd.jdbc.Connection.handleRequest(Connection.java:744)
> at com.vizdom.dbd.jdbc.Connection.run(Connection.java:233)
> at java.lang.Thread.run(java.base@11.0.12/Thread.java:829)
> {noformat}
> If it is difficult to reproduce this problem, then write to me here, I will try to reproduce with a minimal example in Java.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)