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)