You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Madhu Krishna (JIRA)" <ji...@apache.org> on 2010/09/13 22:06:40 UTC

[jira] Updated: (AMQ-2916) KahaDb not closing opend file after lock check in secondery server: shared file system mode

     [ https://issues.apache.org/activemq/browse/AMQ-2916?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Madhu Krishna updated AMQ-2916:
-------------------------------

    Description: 
This For KahaDb store.
>From the logs it looks like activeMq shared file system broker has a leak in RandomAccessfile lock check. On a lock fail it is not closing the opened files. This is causing the secondary server to run out of number of open files set in the OS. 
Current OS is Set to 1024 max open files.

I have been running some tests to validate this and the following is the observations. 
1. Log from secondary server: 
2010-09-10 06:36:12,157 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:36:12,157 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:36:22,159 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:36:22,161 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:36:32,161 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:36:32,162 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:36:42,162 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:36:42,174 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:36:52,175 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:36:52,175 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:37:02,175 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:37:02,176 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:37:12,177 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:37:12,178 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
Note: As you can see that the secondary server is trying to get the lock on  /nfs/soleta/gdvt/activeMq file, it fails as the file has been locked by the primary server. So it tries to get the lock very 10 seconds. 
2. Log from lsof | grep activeMq 
java      13855 madhu   84u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   85u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   86u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   87u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   94u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   95u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   96u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   97u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
You can see that the file used for the lock is not getting closed. 
3. Log from lsof | grep activeMq | wc -l 
The above cmd will give us the total number of open files for " /nfs/soleta/gdvt/activeMq/lock" . 
et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
      56 
et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
      57 
et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
      58 
et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
      62 
 
As you can see that the open files are increasing on "/nfs/soleta/gdvt/activeMq/lock" and the count doesn't come down. 
 

Note: The below changes were done only for learning purpose. 
I was able to resolve this issue by changing version 5.3.0 activeMq-core 
org.apache.activemq.kaha.impl.KahaStore line no 465
I replace line 465 with the following code 
         try{
            	lock();
            }catch(StoreLockedExcpetion e){
            	LOG.error("Got error locking file",e);
                lockFile.getChannel().close();
                lockFile.close();
            	  throw new StoreLockedExcpetion("Kaha Store " + directory.getName() + "  is already opened by another application");
            }


  was:
This For KahaDb store.
>From the logs it looks like activeMq shared file system broker has a leak in RandomAccessfile lock check. On a lock fail it is not closing the opened files. This is causing the secondary server to run out of number of open files set in the OS. 
Current OS is Set to 1024 max open files.

I have been running some tests to validate this and the following is the observations. 
1. Log from secondary server: 
2010-09-10 06:36:12,157 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:36:12,157 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:36:22,159 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:36:22,161 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:36:32,161 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:36:32,162 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:36:42,162 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:36:42,174 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:36:52,175 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:36:52,175 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:37:02,175 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:37:02,176 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
2010-09-10 06:37:12,177 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
2010-09-10 06:37:12,178 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
Note: As you can see that the secondary server is trying to get the lock on  /nfs/soleta/gdvt/activeMq file, it fails as the file has been locked by the primary server. So it tries to get the lock very 10 seconds. 
2. Log from lsof | grep activeMq 
java      13855 madhu   84u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   85u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   86u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   87u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   94u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   95u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   96u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
java      13855 madhu   97u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
You can see that the file used for the lock is not getting closed. 
3. Log from lsof | grep activeMq | wc -l 
The above cmd will give us the total number of open files for " /nfs/soleta/gdvt/activeMq/lock" . 
et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
      56 
et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
      57 
et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
      58 
et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
      62 
 
As you can see that the open files are increasing on "/nfs/soleta/gdvt/activeMq/lock" and the count doesn't come down. 
 




> KahaDb not closing opend file after lock check in secondery server: shared file system mode
> -------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2916
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2916
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.3.0
>         Environment: Mac os x 10.6 which NFS file system for shared file system
>            Reporter: Madhu Krishna
>            Priority: Critical
>
> This For KahaDb store.
> From the logs it looks like activeMq shared file system broker has a leak in RandomAccessfile lock check. On a lock fail it is not closing the opened files. This is causing the secondary server to run out of number of open files set in the OS. 
> Current OS is Set to 1024 max open files.
> I have been running some tests to validate this and the following is the observations. 
> 1. Log from secondary server: 
> 2010-09-10 06:36:12,157 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
> 2010-09-10 06:36:12,157 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
> 2010-09-10 06:36:22,159 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
> 2010-09-10 06:36:22,161 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
> 2010-09-10 06:36:32,161 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
> 2010-09-10 06:36:32,162 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
> 2010-09-10 06:36:42,162 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
> 2010-09-10 06:36:42,174 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
> 2010-09-10 06:36:52,175 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
> 2010-09-10 06:36:52,175 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
> 2010-09-10 06:37:02,175 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
> 2010-09-10 06:37:02,176 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
> 2010-09-10 06:37:12,177 [MQ-BROKER-SERVICE] INFO  (KahaStore.java:463) - Kaha Store using data directory /nfs/soleta/gdvt/activeMq 
> 2010-09-10 06:37:12,178 [MQ-BROKER-SERVICE] INFO  (KahaPersistenceAdapter.java:180) - Store is locked... waiting 10 seconds for the Store to be unlocked. 
> Note: As you can see that the secondary server is trying to get the lock on  /nfs/soleta/gdvt/activeMq file, it fails as the file has been locked by the primary server. So it tries to get the lock very 10 seconds. 
> 2. Log from lsof | grep activeMq 
> java      13855 madhu   84u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
> java      13855 madhu   85u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
> java      13855 madhu   86u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
> java      13855 madhu   87u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
> java      13855 madhu   94u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
> java      13855 madhu   95u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
> java      13855 madhu   96u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
> java      13855 madhu   97u     REG       14,2         0 7519799 /nfs/soleta/gdvt/activeMq/lock 
> You can see that the file used for the lock is not getting closed. 
> 3. Log from lsof | grep activeMq | wc -l 
> The above cmd will give us the total number of open files for " /nfs/soleta/gdvt/activeMq/lock" . 
> et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
>       56 
> et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
>       57 
> et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
>       58 
> et3-tk:~ madhu$ lsof | grep activeMq | wc -l 
>       62 
>  
> As you can see that the open files are increasing on "/nfs/soleta/gdvt/activeMq/lock" and the count doesn't come down. 
>  
> Note: The below changes were done only for learning purpose. 
> I was able to resolve this issue by changing version 5.3.0 activeMq-core 
> org.apache.activemq.kaha.impl.KahaStore line no 465
> I replace line 465 with the following code 
>          try{
>             	lock();
>             }catch(StoreLockedExcpetion e){
>             	LOG.error("Got error locking file",e);
>                 lockFile.getChannel().close();
>                 lockFile.close();
>             	  throw new StoreLockedExcpetion("Kaha Store " + directory.getName() + "  is already opened by another application");
>             }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.