That is why my Tomcats spawn a pool of sh scripts to have them run a unix 
command (ImageMagick, etc.)
Forking of a threaded process is very expensive on a loaded server. Unix has to 
suspend all threads, than fork, do a lot of housekeeping and than resume all 
threads. After making a pool of running sh instances which listen on stdin for 
commands my system %cpu went down so it has more time for user %cpu. Throughput 
doubled in my scenario's.

Ronald.


Op woensdag, 17 november 2010 22:30 schreef Leon Rosenberg 
<rosenberg.l...@gmail.com>:

Hi,

I have a ugly issue I'm sure many people on this list already solved.
For multiple purposes I need pid's of processes, to stop/start them or
ensure they are running. So far nothing spectacular.
To obtain the pid I have following util:

String[] cmd = { "/bin/bash", "-c", "echo $PPID" };
p = Runtime.getRuntime().exec(cmd);

and afterwards read the ppid from the output stream of my process. So
far - so good.

The problem now occurs if a process has a lot of memory configured.
Like 25Gb on a 32Gb machine. In such a configuration the above command
fails with an OS'es out of memory, because fork
fails to create another process with THAT amount of memory:

1598388 2010-11-17 02:54:47,061 ERROR net.anotheria.util.PidTools -
Could not determine PID: java.io.IOException: Cannot run program
"/bin/bash": java.io.IOException: error=12, Cannot allocate memory

Is there another method to obtain the process id from within the process?

regards
Leon

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org






Reply via email to