Le processus Java tue mon ordinateur (Intel i3, 8 Go de RAM). Il prend en charge tout le processeur et le système commence à se bloquer. J'essayais de changer les processus niceness
de Java, mais je dois le contrôler pour toujours et ce n'est pas toujours possible. Donc pour commencer, j'ai essayé de construire une commande pour changer le processus niceness
par son nom. Fini avec quelque chose comme ça:
ps ax -o pid,comm | grep Java | awk '{print $1}' | tr "\n" " " | renice -n 5 -p
Mais on dirait que ça ne marche pas. Et je ne sais pas où aller ensuite. Script Bash peut-être? Exécutez-le par cron
ou par watch
à chaque x
fois? Ou y a-t-il un meilleur moyen?
Si vous n'avez qu'une seule instance Java
en cours d'exécution, simplement:
renice -n 5 -p $(pgrep ^Java$)
$(pgrep ^Java$)
: substitution de commande; bash
remplace ceci par la sortie de pgrep ^Java$
; pgrep ^Java$
renvoie la liste des PID des processus dont le nom correspond à l'expression régulière ^Java$
, qui correspond à tous les processus dont le nom est exactement Java
.Si vous avez plusieurs instances Java
en cours d'exécution:
for p in $(pgrep ^Java$); do renice -n 5 -p $p; done
for p in $(pgrep ^Java$); do renice -n 5 -p $p; done
: presque les mêmes que ci-dessus; $(pgrep ^Java$)
est une substitution de commande; bash
remplace ceci par la sortie de pgrep ^Java$
; pgrep ^Java$
renvoie la liste des PID des processus dont le nom correspond à l'expression régulière ^Java$
, qui correspond à tous les processus dont le nom est exactement Java
; ceci est développé dans la boucle for
, qui assigne une nouvelle ligne de la sortie de pgrep ^Java$
à la variable $p
et exécute renice -n 5 -p $p
à chaque itération jusqu'à la sortie de pgrep ^Java$
est consomméEssaye ça:
pgrep Java | xargs -n 1 echo renice -n 5 -p
Si la sortie est satisfaisante, supprimez echo
.
Après tout, c'était un problème de mémoire. Je n'ai pas défini de mémoire maximale pour Jetty, elle a donc essayé d'allouer 1/4 de la mémoire. J'ai aussi trouvé la solution finale à de tels problèmes ici:
Le moyen le plus simple que j'ai trouvé consiste à utiliser la commande pidof
:
renice <new niceness> -p $(pidof <process name>)
trouvé à partir de: http://www.commandlinefu.com/commands/view/4614/renice-by-name
Pour votre situation, mettez probablement cette commande dans crontab -e
(en tant que root) avec la période de votre choix (par exemple toutes les 30 minutes). Il semble que vous deviez trouver la cause première de vos nouveaux processus Java qui monopolisent les ressources et voir si vous pouvez résoudre/empêcher cela.