Unittestスクリプトを実行していますが、テストケースのセットアップでは、シェルコマンドを時々実行する必要があります。その結果、ユニットテストの実行中にシェルコマンドが約50回実行されます。
CentOSリリース6.6(最終)サーバーでは問題なく動作しますが、Ubuntu 14.04.3LTSでは動作しません。
問題は、シェルスクリプトを約20回実行した後、次のエラーが発生することです。
_exec(): Unable to fork [$(which mysql) -u user -ppwd test_db < "/opt/jenkins/workspace/some - project/application/../tests/Application/assets/sql/test_db.sql" 2> /dev/null]
_
私はインターネット上のすべてのトピックをチェックしましたが、誰も助けてくれませんでした。プロセス数を増やし、開いているファイルの制限を膨大な値に制限しました
_# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3885
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 100000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 6553500
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
_
PHPは同様の数値を報告します。 (ファイルtest.phpには<?php echo system("ulimit -a");
が含まれています)
_# php test.php
time(seconds) unlimited
file(blocks) unlimited
data(kbytes) unlimited
stack(kbytes) 8192
coredump(blocks) 0
memory(kbytes) unlimited
locked memory(kbytes) 64
process 6553500
nofiles 100000
vmemory(kbytes) unlimited
locks unlimited
locks unlimited
_
CLIからroot以外のユーザーとしてスクリプトを実行します。
Phpメモリサイズを2Gbに増やしました
_memory_limit => 2048M => 2048M
_
System、passthrough、shel_execを使用しようとしましたが、違いはありません。
PHPのバージョンは5.6です
_PHP 5.6.14-1+deb.sury.org~trusty+1 (cli)
_
誰かが問題を解決する方法を知っていますか?
シェルからのphpまたはphpでApache/nginxを使用していますか?
いずれにせよ、問題はプロセスリークまたは使用されているメモリが多すぎる可能性があります。
サーバーに対してルートシェルを開いたままにして、別のシェル(またはブラウザー)からこの問題を再現してみることができます。
次に、それが再び発生した場合は、ルートシェルからのプロセスツリーeccを見て、私たちに知らせてください