Some more info on this that I just found. This doesn't happen under load when concurrent dispatch is disabled. Now is that a bug in wonder or in my app.?
-Mike On Nov 30, 2012, at 1:25 PM, Michael Gargano wrote: > okay guys, > > you were right... it's a deadlock.... the worst of all possible worlds. > I've included the trace below for one of the deadlocks. I keep getting two > deadlocks at the time the app goes down. I can't quite figure out why, it > seems like it's always in the same one or two places, but there's nothing so > different about those spots that it shouldn't lock for the same reasons in a > million other places in the app. I'm only doing fetches in these methods > where it breaks and my guess is, that since I have 4 coordinators going, the > four threads involved (between the two deadlocks) are locking the > coordinators and bringing all the other threads to a grinding halt. It > almost looks to me like a bug in the auto-locking. Can one thread be > accessing multiple coordinators? I almost feel like one of the EOs I'm > getting out of my default session store, that is being used in a fetch spec > with an EO from the editing context on the page, are locking across two > different store coordinators. Any help, as usual, is greatly appreciated. > Thanks. > > Found one Java-level deadlock: > ============================= > "WorkerThread255": > waiting for ownable synchronizer 0x0000000750171ce0, (a > java.util.concurrent.locks.ReentrantLock$NonfairSync), > which is held by "WorkerThread68" > "WorkerThread68": > waiting for ownable synchronizer 0x00000007409438e0, (a > java.util.concurrent.locks.ReentrantLock$NonfairSync), > which is held by "WorkerThread255" > > Java stack information for the threads listed above: > =================================================== > "WorkerThread255": > at sun.misc.Unsafe.park(Native Method) > - parking to wait for <0x0000000750171ce0> (a > java.util.concurrent.locks.ReentrantLock$NonfairSync) > at java.util.concurrent.locks.LockSupport.park(Unknown Source) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown > Source) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(Unknown > Source) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(Unknown Source) > at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(Unknown > Source) > at java.util.concurrent.locks.ReentrantLock.lock(Unknown Source) > at > com.webobjects.eocontrol.EOEditingContext.lock(EOEditingContext.java:4617) > at er.extensions.eof.ERXEC.lock(ERXEC.java:514) > at er.extensions.eof.ERXEC.autoLock(ERXEC.java:636) > at er.extensions.eof.ERXEC.initializeObject(ERXEC.java:1143) > at > com.webobjects.eoaccess.EODatabaseContext._fireFault(EODatabaseContext.java:4124) > at > com.webobjects.eoaccess.EOAccessFaultHandler.completeInitializationOfObject(EOAccessFaultHandler.java:89) > at > com.webobjects.eocontrol.EOCustomObject.willRead(EOCustomObject.java:1172) > at > com.webobjects.eocontrol._EOMutableKnownKeyDictionary$Initializer$_GenericRecordBinding.valueInObject(_EOMutableKnownKeyDictionary.java:570) > at > com.webobjects.eocontrol._EOMutableKnownKeyDictionary$Initializer$_LazyGenericRecordBinding.valueInObject(_EOMutableKnownKeyDictionary.java:613) > at > er.extensions.eof.ERXGenericRecord$TouchingBinding.valueInObject(ERXGenericRecord.java:205) > at > com.webobjects.eocontrol.EOCustomObject.storedValueForKey(EOCustomObject.java:1634) > at com.theapp.security.model._EGMUser.role(Unknown Source) > at com.theapp.components.Nav.myLocker(Unknown Source) > at sun.reflect.GeneratedMethodAccessor654.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at > com.webobjects.foundation.NSKeyValueCoding$ValueAccessor$1.methodValue(NSKeyValueCoding.java:636) > at > com.webobjects.foundation.NSKeyValueCoding$_MethodBinding.valueInObject(NSKeyValueCoding.java:1134) > at > com.webobjects.foundation.NSKeyValueCoding$DefaultImplementation.valueForKey(NSKeyValueCoding.java:1324) > at > com.webobjects.appserver.WOComponent.valueForKey(WOComponent.java:1736) > at > com.webobjects.foundation.NSKeyValueCoding$Utility.valueForKey(NSKeyValueCoding.java:447) > at > com.webobjects.foundation.NSKeyValueCodingAdditions$DefaultImplementation.valueForKeyPath(NSKeyValueCodingAdditions.java:212) > at > com.webobjects.appserver.WOComponent.valueForKeyPath(WOComponent.java:1804) > at > com.webobjects.appserver._private.WOKeyValueAssociation.valueInComponent(WOKeyValueAssociation.java:50) > at > com.webobjects.appserver._private.WOHyperlink.invokeAction(WOHyperlink.java:98) > at > er.extensions.components._private.ERXHyperlink.invokeAction(ERXHyperlink.java:66) > at > com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) > at > com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) > at > com.webobjects.appserver._private.WOComponentContent.invokeAction(WOComponentContent.java:38) > at > com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) > at > com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) > at > com.webobjects.appserver._private.WOConditional.invokeAction(WOConditional.java:86) > at > com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) > at > com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) > at > com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079) > at > com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127) > at > com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) > at > com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) > at > com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079) > at > er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:102) > at > com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127) > at > com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) > at > com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) > at > com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079) > at > er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:102) > at > com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127) > at > com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) > at > com.webobjects.appserver._private.WOGenericContainer.invokeAction(WOGenericContainer.java:29) > at > com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) > at > com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) > at > com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079) > at > com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127) > at > com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) > at > com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) > at > com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079) > at > er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:102) > at com.webobjects.appserver.WOSession.invokeAction(WOSession.java:1357) > at > com.webobjects.appserver.WOApplication.invokeAction(WOApplication.java:1745) > at > er.extensions.appserver.ajax.ERXAjaxApplication.invokeAction(ERXAjaxApplication.java:95) > at > er.extensions.appserver.ERXApplication.invokeAction(ERXApplication.java:1906) > at > com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedPage(WOComponentRequestHandler.java:206) > at > com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedSession(WOComponentRequestHandler.java:298) > at > com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedApplication(WOComponentRequestHandler.java:332) > at > com.webobjects.appserver._private.WOComponentRequestHandler._handleRequest(WOComponentRequestHandler.java:369) > at > com.webobjects.appserver._private.WOComponentRequestHandler.handleRequest(WOComponentRequestHandler.java:445) > at > com.webobjects.appserver.WOApplication.dispatchRequest(WOApplication.java:1687) > at > er.extensions.appserver.ERXApplication.dispatchRequestImmediately(ERXApplication.java:2021) > at > er.extensions.appserver.ERXApplication.dispatchRequest(ERXApplication.java:1986) > at > com.webobjects.appserver._private.WOWorkerThread.runOnce(WOWorkerThread.java:144) > at > com.webobjects.appserver._private.WOWorkerThread.run(WOWorkerThread.java:226) > at java.lang.Thread.run(Unknown Source) > "WorkerThread68": > at sun.misc.Unsafe.park(Native Method) > - parking to wait for <0x00000007409438e0> (a > java.util.concurrent.locks.ReentrantLock$NonfairSync) > at java.util.concurrent.locks.LockSupport.park(Unknown Source) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown > Source) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(Unknown > Source) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(Unknown Source) > at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(Unknown > Source) > at java.util.concurrent.locks.ReentrantLock.lock(Unknown Source) > at > com.webobjects.eocontrol.EOObjectStoreCoordinator.lock(EOObjectStoreCoordinator.java:420) > at > er.extensions.eof.ERXObjectStoreCoordinator.lock(ERXObjectStoreCoordinator.java:116) > at > com.webobjects.eocontrol.EOEditingContext.lockObjectStore(EOEditingContext.java:4666) > at er.extensions.eof.ERXEC.lockObjectStore(ERXEC.java:724) > at > com.webobjects.eocontrol.EOCustomObject.willRead(EOCustomObject.java:1165) > at > com.webobjects.eocontrol._EOMutableKnownKeyDictionary$Initializer$_GenericRecordBinding.valueInObject(_EOMutableKnownKeyDictionary.java:570) > at > com.webobjects.eocontrol._EOMutableKnownKeyDictionary$Initializer$_LazyGenericRecordBinding.valueInObject(_EOMutableKnownKeyDictionary.java:613) > at > er.extensions.eof.ERXGenericRecord$TouchingBinding.valueInObject(ERXGenericRecord.java:205) > at > com.webobjects.eocontrol.EOCustomObject.storedValueForKey(EOCustomObject.java:1634) > at com.theapp.security.model._EGMUser.eGMLocation(Unknown Source) > at com.theapp.components.Header.tagline(Unknown Source) > at sun.reflect.GeneratedMethodAccessor241.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at > com.webobjects.foundation.NSKeyValueCoding$ValueAccessor$1.methodValue(NSKeyValueCoding.java:636) > at > com.webobjects.foundation.NSKeyValueCoding$_MethodBinding.valueInObject(NSKeyValueCoding.java:1134) > at > com.webobjects.foundation.NSKeyValueCoding$DefaultImplementation.valueForKey(NSKeyValueCoding.java:1324) > at > com.webobjects.appserver.WOComponent.valueForKey(WOComponent.java:1736) > at > com.webobjects.foundation.NSKeyValueCoding$Utility.valueForKey(NSKeyValueCoding.java:447) > at > com.webobjects.foundation.NSKeyValueCodingAdditions$DefaultImplementation.valueForKeyPath(NSKeyValueCodingAdditions.java:212) > at > com.webobjects.appserver.WOComponent.valueForKeyPath(WOComponent.java:1804) > at > com.webobjects.appserver._private.WOKeyValueAssociation.valueInComponent(WOKeyValueAssociation.java:50) > at > er.extensions.components._private.ERXWOString.appendToResponse(ERXWOString.java:70) > at > com.webobjects.appserver._private.WODynamicGroup.appendChildrenToResponse(WODynamicGroup.java:126) > at > com.webobjects.appserver._private.WODynamicGroup.appendToResponse(WODynamicGroup.java:136) > at > com.webobjects.appserver.WOComponent.appendToResponse(WOComponent.java:1122) > at > er.extensions.components.ERXComponent.appendToResponse(ERXComponent.java:117) > at > com.webobjects.appserver._private.WOComponentReference.appendToResponse(WOComponentReference.java:135) > at > com.webobjects.appserver._private.WODynamicGroup.appendChildrenToResponse(WODynamicGroup.java:126) > at > com.webobjects.appserver._private.WOGenericContainer.appendToResponse(WOGenericContainer.java:44) > at > com.webobjects.appserver._private.WODynamicGroup.appendChildrenToResponse(WODynamicGroup.java:126) > at > com.webobjects.appserver._private.WODynamicGroup.appendToResponse(WODynamicGroup.java:136) > at > com.webobjects.appserver.WOComponent.appendToResponse(WOComponent.java:1122) > at > com.webobjects.appserver._private.WOComponentReference.appendToResponse(WOComponentReference.java:135) > at > com.webobjects.appserver._private.WODynamicGroup.appendChildrenToResponse(WODynamicGroup.java:126) > at > com.webobjects.appserver._private.WODynamicGroup.appendToResponse(WODynamicGroup.java:136) > at > com.webobjects.appserver.WOComponent.appendToResponse(WOComponent.java:1122) > at > er.extensions.components.ERXComponent.appendToResponse(ERXComponent.java:117) > at > com.webobjects.appserver.WOSession.appendToResponse(WOSession.java:1385) > at > er.extensions.appserver.ERXSession.appendToResponse(ERXSession.java:552) > at > com.webobjects.appserver.WOApplication.appendToResponse(WOApplication.java:1794) > at > er.extensions.appserver.ERXApplication.appendToResponse(ERXApplication.java:1923) > at > com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedPage(WOComponentRequestHandler.java:242) > at > com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedSession(WOComponentRequestHandler.java:298) > at > com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedApplication(WOComponentRequestHandler.java:332) > at > com.webobjects.appserver._private.WOComponentRequestHandler._handleRequest(WOComponentRequestHandler.java:369) > at > com.webobjects.appserver._private.WOComponentRequestHandler.handleRequest(WOComponentRequestHandler.java:445) > at > com.webobjects.appserver.WOApplication.dispatchRequest(WOApplication.java:1687) > at > er.extensions.appserver.ERXApplication.dispatchRequestImmediately(ERXApplication.java:2021) > at > er.extensions.appserver.ERXApplication.dispatchRequest(ERXApplication.java:1986) > at > com.webobjects.appserver._private.WOWorkerThread.runOnce(WOWorkerThread.java:144) > at > com.webobjects.appserver._private.WOWorkerThread.run(WOWorkerThread.java:226) > at java.lang.Thread.run(Unknown Source) > > > > > On Nov 28, 2012, at 6:47 PM, Chuck Hill wrote: > >> Now that is a good thought! >> >> On 2012-11-28, at 3:43 PM, Q wrote: >> >>> If you are doing concurrent dispatch then this might be worth doing even >>> after they have been running for a while. It could be that you have a >>> deadlock issue and are slowly deadlocking all your worker threads over time >>> until eventually they all become non-responsive and the app instance is >>> effectively dead in the water. >>> >>> >>> On 29/11/2012, at 6:39 AM, Chuck Hill <ch...@global-village.net> wrote: >>> >>>> Try running jstack on them when the start not responding: >>>> >>>> jstack -F <process id> >>>> >>>> That will give you a thread dump and may show something. >>>> >>>> Have you looked in the logs for OutOfMemory and HeapSpace? It could be >>>> running out of PermGen space >>>> >>>> Are you dispatching requests concurrently? >>>> >>>> >>>> Chuck >>>> >>>> >>>> On 2012-11-28, at 12:05 PM, Michael Gargano wrote: >>>> >>>>> Hi all, >>>>> >>>>> I’m having an issue in our production environment. I have >>>>> two servers (vm’s w/ windows 2008 r2 64-bit) running two instances each. >>>>> The servers are load balanced by a hardware load balancer that pings the >>>>> app on each box every minute to determine if it is still up (because of >>>>> the way our app works, this creates a session). After about a week of >>>>> uptime, the each app instance seems to just stop responding to requests >>>>> one at a time until no instances respond any more. The java processes >>>>> are still always running, but nothing responds. I recently bumped up the >>>>> mem. on the apps to 3G each, to see if that would help, but the same >>>>> problem occurred. Any ideas why this might be happening? It’s not good. >>>>> Below is a sample of the app switches… >>>>> >>>>> -WOPort 2001 -WOCachingEnabled YES -WODebuggingEnabled NO -WOOutputPath >>>>> c:/logs/log-1 -WOAutoOpenInBrowser NO -WOAutoOpenClientApplication NO >>>>> -WOLifebeatInterval 120 -WOLifebeatEnabled YES -WOLifebeatDestinationPort >>>>> 1085 -WOAdaptor WODefaultAdaptor -WOWorkerThreadCount 8 >>>>> -WOListenQueueSize 128 -WOWorkerThreadCountMin 16 -WOWorkerThreadCountMax >>>>> 256 -NSProjectSearchPath () -WOSessionTimeOut 1800 -WOApplicationName eGM >>>>> -WOMonitorEnabled YES -WONoPause YES -Xmx3g >>>>> -WOAllowsConcurrentRequestHandling YES >>>>> >>>>> >>>>> Thanks. >>>>> -Mike >>>>> >>>>> _______________________________________________ >>>>> Do not post admin requests to the list. They will be ignored. >>>>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) >>>>> Help/Unsubscribe/Update your Subscription: >>>>> https://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net >>>>> >>>>> This email sent to ch...@global-village.net >>>> >>>> -- >>>> Chuck Hill Senior Consultant / VP Development >>>> >>>> Practical WebObjects - for developers who want to increase their overall >>>> knowledge of WebObjects or who are trying to solve specific problems. >>>> http://www.global-village.net/gvc/practical_webobjects >>>> >>>> Global Village Consulting ranks 13th in 2012 in BIV's Top 100 Fastest >>>> Growing Companies in B.C! >>>> Global Village Consulting ranks 76th in 24th annual PROFIT 200 ranking of >>>> Canada’s Fastest-Growing Companies by PROFIT Magazine! >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> _______________________________________________ >>>> Do not post admin requests to the list. They will be ignored. >>>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) >>>> Help/Unsubscribe/Update your Subscription: >>>> https://lists.apple.com/mailman/options/webobjects-dev/qdolan%40gmail.com >>>> >>>> This email sent to qdo...@gmail.com >>> >> >> -- >> Chuck Hill Senior Consultant / VP Development >> >> Practical WebObjects - for developers who want to increase their overall >> knowledge of WebObjects or who are trying to solve specific problems. >> http://www.global-village.net/gvc/practical_webobjects >> >> Global Village Consulting ranks 13th in 2012 in BIV's Top 100 Fastest >> Growing Companies in B.C! >> Global Village Consulting ranks 76th in 24th annual PROFIT 200 ranking of >> Canada’s Fastest-Growing Companies by PROFIT Magazine! >> >> >> >> >> >> >> >> >> > > > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/webobjects-dev/mgargano%40escholar.com > > This email sent to mgarg...@escholar.com _______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com