さくらVPSで大量にPerlスクリプトを実行していると出てくる終了しそこね「ゾンビプロセス」を自動でKILLする

カテゴリー:usePocket運営関連(記事数:123)

 
 
 

2020.03.30

さくらVPSで大量にPerlスクリプトを実行していると出てくる終了しそこね「ゾンビプロセス」を自動でKILLする

↓ゾンビプロセスが発生する瞬間


1年前にも書きました。↓

上記を書いて以降、定期的にサーバーをチェックしていたのですが。1分おきにPerlスクリプト(しかもサーバー内の数百ファイルにアクセスし、別のサーバーに数十回アクセスする200kbyteとかのスクリプト)を実行していると年に数プロセスがゾンビ化しちゃうみたいです(年間50万回実行中数回の計算)。手動でKILLするのが面倒になったので自動化した手順を個人的メモ


↑ps aux命令でプロセスリストを見ると、ゾンビ発見!赤矢印のプロセスがCPU占有率99.3%、プロセス持続時間3015時間。

下記のスクリプトではps auxしてプロセスリストを取得、CPU占有時間が10%以上、持続時間が10時間以上のプロセスを見つけると、そのプロセス番号をkillしています。これを1日ごとに定期実行。一応、killした時はログを出力させています。


------------------------------------
#! /usr/bin/perl

open my $rs, "ps aux 2>&1 |";
my @pslist = <$rs>;
close $rs;

$tt=time;

foreach my $Line (@pslist){
my @Parts=split(/ +/,$Line);
my @Parts2=split(/:/,$Parts[9]);
#duration hour>10
if ($Parts2[0]>10 && $Parts[10] eq 'perl'){
open (FILE,">>killlog.txt");
print &DecodeTime($tt)."\n";
print FILE $Line."\n";
close FILE;
`kill $Parts[1]`;
}
}
print "Content-type: text/html\n\n";
print 'ok';
exit;

sub DecodeTime{
($DTsec,$DTmin,$DThou,$DTmday,$DTmon,$DTyear,$DTwday,$DTyday,$DTisdst)=localtime($_[0]);
$DTyear =$DTyear+1900;
$DTmon=$DTmon+1;

$DTtime =sprintf("%4d",$DTyear)."/".sprintf("%02d",$DTmon)."/".sprintf("%02d",$DTmday).' '.sprintf("%02d",$DThou).':'.sprintf("%02d",$DTmin);
return($DTtime);
}
------------------------------------


↓このプロセスキラーを実行してみたところ。CPUの使用量が元に。この段階でゾンビプロセスが2つたまってました。


「さくらVPS」共有サーバーは各アカウントごとのコントロールパネル上のCPU使用時間は最大2sec/secでCPUリソースが制限されているみたいだけど、さすが今時のマルチアカウント、マルチタスクOSはゾンビスクリプトがたまっていても普通に動作し続けるみたい。でも同じサーバー使っている人からみたら迷惑極まりないよねw

あなたの使っている共有サーバーやレンタルホームページサービスにもゾンビプロセスを抱えた困った顧客がいるかもしれませんよ?(笑えない怪談)

Category:usePocket運営関連



コメント

いいっすね!
001 [03/30 22:36]通りすがり@InfoWeb:これ、ゾンビプロセスではないですよね?単にどこかがバグっているだけでは?https://ja.wikipedia.org/wiki/%E3%83%97%....
002 [03/31 11:20]ふぇちゅいん(管理人) TW★74:すげーな、ゾンビプロセスの厳格な定義なんてあるんだwww。この定義に従えばゾンビではなくて暴走プロセスかと。
003 [03/31 17:37]通りすが@InfoWeb:ってか、ps -axs とかやって、ゾンビプロセスは、ちゃんと Z の表示が出るので、それを”ゾンビ”と言うかと。上の例だと、PID 8044が、まさにそれですね。
004 [03/31 17:38]通りすがり@InfoWeb:ってか、ps -axs とかやって、ゾンビプロセスは、ちゃんと Z の表示が出るので、それを”ゾンビ”と言うかと。上の例だと、PID 8044が、まさにそれですね。
005 [04/01 00:18]ふぇちゅいん(管理人) TW★74:なる〜

名前 ↑B

コメント(※改行は省略されます)

※3回以上の連続書き込み不可
この記事のアクセス数: 本日の記事一覧に戻る


→カテゴリー:usePocket運営関連(記事数:123)
アクセス数の多い記事(過去1ヶ月)

すべて見る