共有サーバー上のユーザーのcronジョブがすべて同時に実行され、競合に巻き込まれることがかなり頻繁に発生します(私が知る限りでは)。そのため、負荷が爆発し、Nagiosが怒ったり、Apacheが応答を停止したり、タイムアウトしたためにSSHで接続できなかったりします。ユーザーがcronを実行できないと一方的に判断できる立場にはありませんが、 pgrep crond | wc-lが> 50を返すこの問題に対処するため。
任意の時点で実行されるcrondプロセスの数を制限することで、それらをずらすことは可能であるように思われます(たとえば、一部のプロセスがハッキングが少なくなるまでSIGSTOPを送信するなど)が、良いリードはまだ見つかりません。
ハードウェア:4 CPU以上、ローエンドは最大8GBのメモリを搭載したDell 1435、RAID 10 WD EADS主にPleskとcPanelですが、いくつかの邪悪なSpheraシステムもあります。
この問題にどのように対処しますか、sf?
cron.allow
およびcron.deny
を使用してcronへのユーザーアクセスを制限するか、 PAM Limits を使用してCPU使用率、プロセス数などを制限できます。それとは別に、解決策は、ユーザーによるcron
ジョブを監視および処理するための何かを作成することです。これは、cronには実行するジョブの数に実際には制限がないためです。
CPanelには、同時に実行されているcronジョブの数について何かがあると思いますが、それは特定のツールです(確かではありません)。
私はあなたがそれらの問題の1つを持っていると思います:
crontabを同時に実行するのに十分なメモリがありません。次の方法で修正できます。
高いI/O。次の方法で修正できます。
ionice
でI/O優先度を下げるマシンがスワップしているかどうかを確認し、夜間にスワップしていない場合は、cron I/O優先度クラスをアイドルに変更します。
Sudo ionice -c 3 -p $(pgrep cron)
私は常にランダムな時間(特に数分)でcronジョブをスケジュールしました。私はよく、次のように深夜に実行されるcronの例を目にします。
0 0 * * * /usr/bin/echo "Job ran"
あなたがそのように定義された多くの仕事を持っているならば、あなたはトラブルを求めています。残念ながら、これらは多くの場合、長時間実行されるシステムジョブです。また、バッチプロセスウィンドウ全体で異なる時間にジョブをスケジュールする傾向があります。 (23から05)時間。
Ubuntuで使用されている新しいcron仕様が気に入っています。これには、実行するジョブを指定するための/etc/cron.*
ディレクトリがいくつかあります。それらは、負荷を並列に制限するのではなく、順番に実行されます。
/etc/spool/cron/crontabs
にあるファイルで何がスケジュールされているかを確認できるはずです。これらのファイルを読み取るには、rootアクセスが必要です。問題を引き起こしているのがユーザーである場合は、問題について話し合ってください。
/var/log/syslog
でCRONエントリをチェックして、何がいつ実行されているかを確認することもできます。