2017-03-12 11 views
0

最近、プロセスがランダムにメモリ不足例外で死ぬようになりました。さらに、印刷されたそれらのプロセスの再起動スクリプト: ./start.sh:4:./start.sh:Debian:フォークできません(メモリ問題)

をforkできないスクリプトは次のようになります。

#!/bin/sh 

#EU1 
while : 
do 

if ! screen -list | grep -q "eu1"; then 
echo EU1 ist down, Patch eingeleitet! 
cd MysticRunes/EU1 
./patch.sh 
echo EU1 Patch ausgeführt! 
screen -dmS eu1 java -Xms6000M -Xmx6000M -jar spigot.jar nogui 
echo EU1 neugstartet! 
cd ../.. 
fi 

#MRDev 
if ! screen -list | grep -q "mrdev"; then 
echo MRDev ist down, restart eingeleitet! 
cd MysticRunes/Developer 
screen -dmS mrdev java -Xms4000M -Xmx4000M -jar spigot.jar nogui 
echo MRDev neugstartet. 
cd ../.. 
fi 

sleep 1 
done 

無料-mは、このことを示しています

   total  used  free  shared buffers  cached 
Mem:   32125  29902  2222   0  1386  17873 
-/+ buffers/cache:  10642  21483 
Swap:  16375   0  16375 

そしてhtopのは、このことを示しています ​​

私は本当に問題ここでいただきまし伝えることはできません。私は使用されているメモリを調べましたが、私のメモリはあまり使われていませんでした。なぜなら、キャッシュにのみ割り当てられ、メモリが必要なときにキャッシュに割り当てられたメモリが解放されているからです。何度も何度も同じプロセスを表示しているHTOPは、おそらくサーバーが正しく動作しているスレッドの量だけでしょうか?プロセスの8.7%のメモリ使用量を持つすべてのエントリを合計して合計8.7%にすることは基本的に可能ですか?

多分私はこれを間違っているので、修正してください。

よろしくお願いいたします、

Jalau
+0

このJavaアプリケーションのスレッド数は通常ですか?アプリケーションは、バグや誤設定のためにスレッドを直感的に作成し、カーネルのプロセステーブルを新しいPIDを作成できないポイントまでいっぱいにする可能性があります。 32ビットLinuxを実行している場合、/ proc/sys/kernel/pid_maxは32768と低いかもしれません。 –

+0

@ HishamHM私はそれが正常であるべきだと思います。私はしかし、確認することができます。先端に感謝します。 Linux 32bitを確認するにはどうすればいいですか?もしそうなら、私はどうしたらいいですか? – Jalau

+0

'cat/proc/sys/kernel/pid_max'を実行し、それが返す番号を確認してください。それが32768のような低い数なら、あなたはこのスレッド数を超えることはできません。 'ps -efL |を実行するwc -l'は使用中のPIDの現在の数を返します。 –

答えて

1

溶液は、スレッドを作成し、このようなスレッドの最大量は、ある時点で到達させる維持スレッドプールがあったことでした。助けてくれてありがとう。

関連する問題