> -----Original Message-----
> From: Leon Rosenberg [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, September 06, 2005 9:03 AM
> To: Tomcat Users List
> Subject: RE: Tomcat/JVM hangs in session.getAttribute / HashMap.get()
>
> On Tue, 2005-09-06 at 08:47 -0400, Larry Isaacs wrote:
> > I have seen instances of a HashMap whose entries got circularly
> > linked, I assume, due to updates which where not thread safe.
> > Any thread using a get() on such a HashMap will spin
> forever chasing
> > its tail.
> >
> > Cheers,
> > Larry
>
> Could be possible since we also have increasing load (until
> idle time goes to zero) on those machines.... but...
> we are putting only pretty simple objects like Locale or an
> userId object.
I don't think it is a matter of how simple the object, but how
it is being stored in the session.
> If I understand you correctly your scenario is:
> HashMap Entry has a linked list of X entries at one position
> and entry[Y] is poiting to the first entry instead of next or null?
Correct.
> But how can that happen? a JVM / Core Api bug?
The error is likely in webapp code, since the Servlet spec leaves
it up to the webapp to implement thread safe setting and update of
session objects. I haven't researched the HashMap source code to
see exactly how this situation can come about, so I can't say
exactly what to look for. Thus, the not terribly helpful advice
is to examine for thread safety each location where the session is
written.
Cheers,
Larry
>
>
> public abstract class UserId implements Serializable{
>
> public abstract String getPlainPresentation();
>
> public boolean equals(Object anotherObject){
> return anotherObject instanceof UserId ?
>
> ((UserId)anotherObject).getPlainPresentation().equals(getPlain
> Presentation()):
> false;
> }
>
> public abstract String[] getFragmentation(int
> fragementationDepth, int fragmentLength);
>
> public String toString(){
> return getPlainPresentation();
> }
> }
>
> public class LongUserId extends UserId implements Serializable{
>
> private long value;
> private transient String cachedStringPresentation;
>
> private static final long serialVersionUID =
> 451670268366493765L;
>
> public LongUserId(long aValue){
> this.value = aValue;
> }
>
> public int hashCode(){
> return (int)value;
> }
>
>
> public boolean equals(Object o){
> return (o instanceof LongUserId) ?
> ((LongUserId)o).value == value : false;
> }
>
>
> public String[] getFragmentation(int fragmentationDepth, int
> fragmentLength) {
> String s = getPlainPresentation();
> //first ensure our string is long enough.
> while (s.length()<fragmentationDepth*fragmentLength)
> s = "0"+s;
>
> int singleLength = fragmentLength;
> String ret[] = new String[fragmentationDepth];
> for (int i=0; i<fragmentationDepth; i++){
> String fragment =
> s.substring(i*singleLength, i*singleLength
> +singleLength);
> ret[i] = fragment;
> }
>
> return ret;
> }
>
> public String getPlainPresentation() {
> if (cachedStringPresentation==null)
> cachedStringPresentation = ""+value;
> return cachedStringPresentation;
> }
>
>
> thanx
> Leon
>
>
> >
> > > -----Original Message-----
> > > From: Leon Rosenberg [mailto:[EMAIL PROTECTED]
> > > Sent: Tuesday, September 06, 2005 8:31 AM
> > > To: [email protected]
> > > Subject: Tomcat/JVM hangs in session.getAttribute / HashMap.get()
> > >
> > > Hi,
> > >
> > > This is quite ugly but we are running out of ideas.
> > >
> > > We are currently experiencing stange behaviour of tomcat
> (or the VM).
> > >
> > > Our tomcat hangs (not reproduceable, but probably on parallel
> > > requests to similar methods) in session.getAttibute():
> > >
> > > We checked the source code of the HashMap, StandardSession and
> > > StandardSessionFacade but couldn't find any synchronized methods.
> > > The manager shows the 4 threads hanging since 4000000
> millis (more
> > > than an hour).
> > >
> > > we created a stacktrace with kill - QUIT, here the threads are:
> > >
> > >
> > > "http-8580-Processor3" daemon prio=1 tid=0x7cdf11d0
> > > nid=0x3269 runnable [7d7fe000..7d7ff8bc]
> > > at java.util.HashMap.get(HashMap.java:325)
> > > at
> > > org.apache.catalina.session.StandardSession.getAttribute(Stand
> > > ardSession.java:975)
> > > at
> > > org.apache.catalina.session.StandardSessionFacade.getAttribute
> > > (StandardSessionFacade.java:109)
> > > at
> > > de.friendscout.datingr4.shared.presentation.action.BaseAction.
> > > getUserId(BaseAction.java:653)
> > > at
> > > de.friendscout.datingr4.onlinearea.presentation.action.BaseOnl
> > > ineAreaAction.getSettings(BaseOnlineAreaAction.java:89)
> > > at
> > > de.friendscout.datingr4.onlinearea.presentation.action.GetOnli
> > > neUsersAction.doExecute(GetOnlineUsersAction.java:49)
> > >
> > >
> > > "http-8580-Processor1" daemon prio=1 tid=0x7d3fa078
> > > nid=0x3269 runnable [7ce7f000..7ce7f8bc]
> > > at java.util.HashMap.get(HashMap.java:325)
> > > at
> > > org.apache.catalina.session.StandardSession.getAttribute(Stand
> > > ardSession.java:975)
> > > at
> > > org.apache.catalina.session.StandardSessionFacade.getAttribute
> > > (StandardSessionFacade.java:109)
> > > at
> > > de.friendscout.datingr4.shared.presentation.action.BaseAction.
> > > getUserId(BaseAction.java:653)
> > > at
> > > de.friendscout.datingr4.onlinearea.presentation.action.ShowFil
> > > tersAction.doExecute(ShowFiltersAction.java:42)
> > > at
> > > de.friendscout.datingr4.shared.presentation.action.BaseAction.
> > > execute(BaseAction.java:316)
> > >
> > >
> > >
> > > "http-8580-Processor24" daemon prio=1 tid=0x7d430200
> > > nid=0x3269 runnable [7e77f000..7e77f8bc]
> > > at java.util.HashMap.get(HashMap.java:325)
> > > at
> > > org.apache.catalina.session.StandardSession.getAttribute(Stand
> > > ardSession.java:975)
> > > at
> > > org.apache.catalina.session.StandardSessionFacade.getAttribute
> > > (StandardSessionFacade.java:109)
> > > at
> > > de.friendscout.datingr4.shared.presentation.util.RealmUtility.
> > > initRealm(RealmUtility.java:66)
> > > at
> > > de.friendscout.datingr4.shared.presentation.util.RealmUtility.
> > > initRealm(RealmUtility.java:61)
> > > at
> > > de.friendscout.datingr4.shared.presentation.controller.Control
> > > lerServlet.doGet(ControllerServlet.java:139)
> > >
> > >
> > > My Java knowledge isn't sufficent to explain how
> something can hang
> > > in
> > > HashMap.get() since its not synchronized. Neither are the
> > > .getAttribute() methods of the StandardSession or
> > > StandardSessionFacade.
> > >
> > > We are using jdk 1.4.2_08-b03, tomcat 5.0.25, struts 1.1,
> jacorb 2.2
> > > (night build) on linux/debian/sarge - 3.1 stable.
> > >
> > > any ideas? anybody?
> > >
> > > regards
> > > Leon
> > >
> > >
> > >
> > >
> --------------------------------------------------------------------
> > > - To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> > > For additional commands, e-mail:
> [EMAIL PROTECTED]
> > >
> > >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]