3

Java process is killing my computer (Intel i3, 8GB RAM). It takes over whole CPU and system starts to hang. I was trying to change niceness of java processes but i have to control it for all time and this is not always possible. So for beginning I tried to construct a command to change process niceness by name. Ended up with something like this:

ps ax -o pid,comm | grep java | awk '{print $1}' | tr "\n" " " | renice -n 5 -p

But it looks like it doesn't work. And I don't know where to go next. Bash script maybe? Run it by cron or by watch every x time? Or is there a better way?

6

If you have only one java instance running, simply:

renice -n 5 -p $(pgrep ^java$)
  • $(pgrep ^java$): command substitution; bash replaces this with the output of pgrep ^java$; pgrep ^java$ returns the list of PIDs of the processes whose name matches the regular expression ^java$, which matches all processes whose name is exactly java

If you have multiple java instances running:

for p in $(pgrep ^java$); do renice -n 5 -p $p; done
  • for p in $(pgrep ^java$); do renice -n 5 -p $p; done: almost the same as above; $(pgrep ^java$) is a command substitution; bash replaces this with the output of pgrep ^java$; pgrep ^java$ returns the list of PIDs of the processes whose name matches the regular expression ^java$, which matches all processes whose name is exactly java; this is expanded into the for loop, which assigns a new line of the output of pgrep ^java$ to the variable $p and runs renice -n 5 -p $p at each iteration until the output of pgrep ^java$ is consumed
  • That works pretty well. But to take next step, what is better to run this periodically. Some cron or watch command? – Sebastian Piskorski Jul 2 '15 at 9:57
3

Try this:

pgrep java | xargs -n 1 echo renice -n 5 -p

If output is okay, remove echo.

0

After all I occured it was memory problem. I didn't set maximum memory for Jetty so it tried to allocate 1/4 of all memory. Also I have found final solution for such problems here:

OOM killer not working?

0

The easiest way I've found is using the pidof command:

renice <new niceness> -p $(pidof <process name>)

found from: http://www.commandlinefu.com/commands/view/4614/renice-by-name

For your situation, probably put that command into crontab -e (as root) with whatever period you want (say every 30 mins). It seems like you should find the root cause of your new and resource-hogging java processes and see if you can fix/prevent that.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.