---------------------------------------------------------------------------
HARBOR: http://coolharbor.100free.com/index.htm
Now Tomcat is also a cool application server
---------------------------------------------------------------------------
----- Original Message ----- From: "Peter Bauer" <[EMAIL PROTECTED]>
To: <users@tomcat.apache.org>
Sent: Wednesday, October 17, 2007 5:24 PM
Subject: Re: All threads are currently busy



Good afternoon Martin :-)

On Wednesday 18 October 2000 16:08:34 you wrote:
Good Morning Peter

I assume you have built glibc for debian following the specific build
instructions for debian..following this example
http://www.linux-m32r.org/eng/download.html#debpackage

I did not build the libc packages myself, currently
libc6 2.3.2.ds1-22
libc6-dev 2.3.2.ds1-22
are installed.

This version of TC is quite old ..not sure if its supported anymore

Yes, i know about that. If there is a major bug in this version, i could argue to upgrade (at least to the last 4.1.x version) but i would need some facts to be able to do so.

Can we see the source for the removeActiveRole



I was hoping to see a thread WAIT or something like that... no such luck ;)
I'm wondering if DatabaseAccess is shared and another thread (in another servlet) wrecks the connection as this uses it.... maybe... Maybe there is a subtle loop.... through the POST, its waiting for reply, which is in another thread, which is waiting for this thread...

OK... I'm finished guessing ;)


public static synchronized void removeActiveRoles(final DatabaseAccess dba, final String terminalid, final String sessionid, boolean isNam) {
       //check parameters
       if(terminalid == null || terminalid.length() == 0) {
LOG.error("ActiveRoleRemoval.removeActiveRoles(): Could not remove active roles of terminal, empty terminalid given.");
       }
       if(sessionid == null || sessionid.length() == 0) {
LOG.error("ActiveRoleRemoval.removeActiveRoles(): Could not remove active roles of terminal, empty sessionid given.");
       }

       //get active roles of failed terminal
       ThreeValStructure failedRoles = new ThreeValStructure();
String sql = "SELECT name, functionname, role_type FROM tableactiveuserroles WHERE " + "terminalid = '" + terminalid + "' AND autologin <> 1";
       if (!dba.executeQuery(sql)) {
           /* database statement failed */
LOG.error("ActiveRoleRemoval, removeActiveRoles(), sql statement failed " + sql);
           return;
       }
       while (dba.checkNext()) {
failedRoles.add(dba.getValue("name"), dba.getValue("functionname"), dba.getValue("role_type"));
       }

//send faked logout message via HTTP POST to commDicora servlet for failed roles
       if(!ActiveRoleRemoval.sendLogoutMessages(failedRoles, sessionid)) {
LOG.error("Sending logout messages for failed roles failed, continuing");
       }

//activate failed roles on all terminals which have a role for which the failed role is the backup role
       BackuproleActivator activator = new BackuproleActivator(dba);
       for (int index = 0; index < failedRoles.size(); index++) {
           String nameFailedRole = failedRoles.getEl1(index);

           //get all relevant terminalids
String sqlSelectTerminals = "SELECT terminalid FROM tableactiveuserroles WHERE " +
                                       "terminalid <> '" + terminalid +
"' AND typeOfTerminal <> " + ApusConstants.DICORA_M + "AND backuprolename = '" + nameFailedRole + "'";
           if (!dba.executeQuery(sqlSelectTerminals)) {
LOG.error("ActiveRoleRemoval, removeActiveRoles(), sql statement failed " + sqlSelectTerminals);
               return;
           }
LinkedList<String> backupTerminalsIds = new LinkedList<String>();
           while(dba.checkNext()) {
               backupTerminalsIds.add(dba.getValue("terminalid"));
           }
           if(backupTerminalsIds.size() == 0) {
               LOG.debug("ActiveRoleRemoval, removeActiveRoles(): " +
"No backup terminals for Role '" + nameFailedRole + "' found!");
           }

for (Iterator iter = backupTerminalsIds.iterator(); iter.hasNext();) {
               String backupTerminalId = (String) iter.next();

               activator.sendActivationMessage(backupTerminalId,
                                               nameFailedRole,
                                               failedRoles.getEl3(index),
                                               failedRoles.getEl2(index),
                                               isNam);
           }
       }
   }

specifically are there higher priority threads currently executing so
perhaps yield to those threads may apply?
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html

There are no threads i am creating which have a non-default priority.

thanks,
Peter

HTH/
Martin--

----- Original Message -----
From: "Peter Bauer" <[EMAIL PROTECTED]>
To: <users@tomcat.apache.org>
Sent: Wednesday, October 17, 2007 4:52 AM
Subject: All threads are currently busy

> Hi all,
>
> System:
> Tomcat 4.1.30 on Debian sarge
> java version "1.5.0_11"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
> Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode, sharing)
>
> in situations with high load, tomcat sometimes stops responding and is
> not

able to recover from that status. In the catalina.out file, i get the

following line:
> SEVERE: All threads (75) are currently busy, waiting. Increase > maxThreads

(75) or check the servlet status

> i searched some time in various forums and mailing list archives and
> found

the following links:

http://mail-archives.apache.org/mod_mbox/tomcat-users/200408.mbox/%3c2004Au
g [EMAIL PROTECTED]

> http://marc.info/?l=tomcat-user&m=113297294417902&w=2
> http://www.tek-tips.com/viewthread.cfm?qid=862552&page=3
> http://www.mail-archive.com/[EMAIL PROTECTED]/msg127833.html
>
> Basically there seem to be 2 possible reasons for this behaviour
> 1. A bug (?) in Tomcat or the combination of JDK, glibc, whatever, > which

causes that tomcat does not

> recover from situations with too much requests. I could not find any

information in the release notes

> of the Tomcat 4.1.x versions.
> 2. Some kind of deadlock or resource (database connections) > availability

problem which

> keeps the request handling threads from returning from the > doPost/Get

method.

> So i made a Threaddump using jstack (attached file). Most of the > threads

are in

>  - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
>  - java.lang.Object.wait() @bci=2, line=474 (Interpreted frame)
> - org.apache.catalina.core.StandardWrapper.allocate() @bci=223, > line=704

(Interpreted frame)

> but 19 threads are blocked in the bci 0 of the same static synchronized

method called removeActiveRoles

> which is called from the doPost() method.
>
>  -

at.sonorys.dmc.utilities.ActiveRoleRemoval.removeActiveRoles(at.sonorys.dmc
. utilities.DatabaseAccess, java.lang.String, java.lang.String, boolean)
@bci=0 (Interpreted frame)

>  - at.sonorys.dmc.CommDicora.CommHandleMessageSession.quitSession()

@bci=23 (Interpreted frame)

>  -
> at.sonorys.dmc.CommDicora.CommHandleMessageSession.doHandleSessionMsg()

@bci=131 (Interpreted frame)

>  - at.sonorys.dmc.CommDicora.CommHandleMessageSession.evalMessage()
> @bci=1

(Interpreted frame)

>  -

at.sonorys.dmc.CommDicora.CommDicoraServlet.doHandleMsg(javax.servlet.http.
H ttpServletResponse, javax.servlet.http.HttpServletRequest) @bci=103
(Interpreted frame)

>  -

at.sonorys.dmc.CommDicora.CommDicoraServlet.doPost(javax.servlet.http.HttpS
e rvletRequest, javax.servlet.http.HttpServletResponse) @bci=142
(Interpreted frame)

> The servlet implements the SingleThreadModel (not my decision). As you
> can

see from the threaddump, all 19 threads are waiting to

> get into the same static synchronized method. I dont understand this

because there must be one thread IN the method

> which holds the lock of the method? Is it possible for a thread to > leave
> a

synchronized method without returning the

> lock?
>
> br,
> Peter





---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to