2000-12-07 16:14:19

by Frank de Lange

[permalink] [raw]
Subject: java (and possibly other threaded apps) hanging in rt_sigsuspend

Hi Ulrich,

I saw your remarks on the kernel mailing list wrt. 'threaded processes get
stuck in rt_sigsuspend/fillonedir/exit_notify' dd. 20000911-12, and thought you
might be interested in the fact that something quite like this also happens on
2.4.0-test11 with glibc-2.2 (release), BUT NOT ALWAYS...

I can reliably hang java (Blackdown port jdk1.3, FCS) using the -Xmx parameter
(which specifies a maximum heap size), the weird thing is that it does NOT hang
which this parameter is either not specified OR specified but larger than a
certain value. When it hangs, it always is stuck in a rt_sigsuspend call just
after a clone() call. An example:

[frank@behemoth frank]$ java
(java starts and spits out some info, then exits as it should)


[frank@behemoth frank]$ java -Xmx32m
(java ALWAYS gets stuck:

pipe([6, 7]) = 0
clone() = 14732
[pid 14679] write(7, "\0\0\0\0\5\0\0\0~\266\2@ $T@\0 T@\0 T@\300\265\2@\0\0\0"..., 148) = 148
[pid 14679] rt_sigprocmask(SIG_SETMASK, NULL, [RT_0], 8) = 0
[pid 14679] write(7, "`S\3@\0\0\0\0\20\321\377\277pD\37@\30&\5\10\0\0\0\200\0"..., 148) = 148
[pid 14679] rt_sigprocmask(SIG_SETMASK, NULL, [RT_0], 8) = 0
[pid 14679] rt_sigsuspend([]
)


[frank@behemoth frank]$ java -Xmx64m
(java runs, but it gets stuck if this command is repeated a few times in quick succession.)

[frank@behemoth frank]$ java -Xmx80m
(java runs, no matter how often the command is repeated)


Some data on the test system:

[uname -a]
Linux behemoth.localnet 2.4.0-test11 #1 SMP Wed Nov 22 22:10:52 CET 2000 i686 unknown

[/lib/libc-2.2.so]
GNU C Library stable release version 2.2, by Roland McGrath et al.
Copyright (C) 1992,93,94,95,96,97,98,99,2000 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 2.95.2 19991024 (release).
Compiled on a Linux 2.4.0-test11 system on 2000-11-23.
Available extensions:
GNU libio by Per Bothner
crypt add-on version 2.1 by Michael Glad and others
The C stubs add-on version 2.1.2.
BIND-8.2.3-T5B
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Glibc-2.0 compatibility add-on by Cristian Gafton
linuxthreads-0.9 by Xavier Leroy
libthread_db work sponsored by Alpha Processor Inc
Report bugs using the `glibcbug' script to <[email protected]>.

[java -version]
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build Blackdown-1.3.0-FCS)
Java HotSpot(TM) Client VM (build Blackdown-1.3.0-FCS, mixed mode)


Why am I sending you this report? Well, since you indicate that you are working
on a rewrite of linuxthreads, this might be of interest. Especially the weird
behaviour wrt. the maximum heap size. I do not expect nor ask you to fix the
java problems, this is purely informational...

FYI, on a linux 2.2/glibc 2.1.3 box this problem does not occur, in case you
wondered...

I cc'd this message to the blackdown team, so they know something's amiss as
well.

Cheers//Frank
--
WWWWW _______________________
## o o\ / Frank de Lange \
}# \| / \
##---# _/ <Hacker for Hire> \
#### \ +31-320-252965 /
\ [email protected] /
-------------------------
[ Hacker: http://www.jargon.org/html/entry/hacker.html ]


2000-12-08 06:47:52

by Juergen Kreileder

[permalink] [raw]
Subject: Re: java (and possibly other threaded apps) hanging in rt_sigsuspend

>>>>> "Frank" == Frank de Lange <[email protected]> writes:

Frank> I saw your remarks on the kernel mailing list
Frank> wrt. 'threaded processes get stuck in
Frank> rt_sigsuspend/fillonedir/exit_notify' dd. 20000911-12, and
Frank> thought you might be interested in the fact that something
Frank> quite like this also happens on 2.4.0-test11 with glibc-2.2
Frank> (release), BUT NOT ALWAYS...

Frank> I can reliably hang java (Blackdown port jdk1.3, FCS) using
Frank> the -Xmx parameter (which specifies a maximum heap size),
Frank> the weird thing is that it does NOT hang which this
Frank> parameter is either not specified OR specified but larger
Frank> than a certain value. When it hangs, it always is stuck in
Frank> a rt_sigsuspend call just after a clone() call. An example:

Frank> [frank@behemoth frank]$ java
Frank> (java starts and spits out some info, then exits as
Frank> it should)

Frank> [frank@behemoth frank]$ java -Xmx32m
Frank> (java ALWAYS gets stuck:

Frank> pipe([6, 7]) = 0
Frank> clone() = 14732
Frank> [pid 14679] write(7, "\0\0\0\0\5\0\0\0~\266\2@ $T@\0 T@\0 T@\300\265\2@\0\0\0"..., 148) = 148
Frank> [pid 14679] rt_sigprocmask(SIG_SETMASK, NULL, [RT_0], 8) = 0
Frank> [pid 14679] write(7, "`S\3@\0\0\0\0\20\321\377\277pD\37@\30&\5\10\0\0\0\200\0"..., 148) = 148
Frank> [pid 14679] rt_sigprocmask(SIG_SETMASK, NULL, [RT_0], 8) = 0
Frank> [pid 14679] rt_sigsuspend([]
Frank> )

Can you reproduce this without strace?

I only see this problem when I run with 'strace -f' and java wants to
exit (apart from that java works correctly). I don't see the dependency
on the heap size here.


Juergen

--
Juergen Kreileder, Blackdown Java-Linux Team
http://www.blackdown.org/java-linux.html
JVM'01: http://www.usenix.org/events/jvm01/

2000-12-08 14:03:09

by Frank de Lange

[permalink] [raw]
Subject: Re: java (and possibly other threaded apps) hanging in rt_sigsuspend

> Can you reproduce this without strace?
>
> I only see this problem when I run with 'strace -f' and java wants to
> exit (apart from that java works correctly). I don't see the dependency
> on the heap size here.

Yes, I only started using strace when the problem became apperent. Java 1.3.0
does NOT start with any maximum heap size value lower than 49 Mb (java -Xmx48mb
will stall, java -Xmx49m will start). The javaplugin for mozilla also fails to start in a similar fashion.

(cc'd to the l-k list)

Cheers//Frank
--
WWWWW _______________________
## o o\ / Frank de Lange \
}# \| / \
##---# _/ <Hacker for Hire> \
#### \ +31-320-252965 /
\ [email protected] /
-------------------------
[ Hacker: http://www.jargon.org/html/entry/hacker.html ]