ulimitは、Linux/UNIXシステムでユーザーやプロセスが使用できるリソース(メモリ、CPU時間、ファイルディスクリプタ数など)の上限を設定・確認するシェルの内蔵コマンド
ログインノードで現在掛けられている制限は
[illya@openpbs ~]$ cat /etc/redhat-release
Rocky Linux release 9.7 (Blue Onyx)
[illya@openpbs ~]$ ulimit -a
real-time non-blocking time (microseconds, -R) unlimited
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31585
max locked memory (kbytes, -l) 8192
max memory size (kbytes, -m) unlimited
open files (-n) 1024
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) 31585
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[illya@openpbs ~]$となっている。
これが qsub で計算ノードに入ると変わって
[illya@openpbs ~]$ qsub -l select=1 -I
qsub: waiting for job 1.openpbs to start
qsub: job 1.openpbs ready
[illya@r9-1 ~]$ ulimit -a
real-time non-blocking time (microseconds, -R) unlimited
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 63785
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 16384
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 63785
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[illya@r9-1 ~]$と変わる. 変更したものだけを下記に示す. 一応バッチファイルを用意してqsubで流してもinteractive jobと同じ値です.
| 項目 | ログインノード | 計算ノード(openPBS経由) |
| pending signals | 31585 | 63785 |
| max locked memory | 8192 | unlimited |
| open files | 1024 | 16384 |
| stack size | 8192 | unlimited |
| max user processes | 31585 | 63785 |
実際エラーログがでている。
「OSError: [Errno 24] Too many open files: '/proc/3582594/stat' Exception in thread Thread-28 (work):」
その後workerが落ちて、masterからの応答にも返事ができなくて「no heartbeat」としてジョブ自体も落ちる.
ではこの計算ノードに入った時の「ulimit -n」を「16384」より大きくするには?
修正箇所は計算ノードの「/opt/pbs/lib/init.d/limits.pbs_mom」
MEMLOCKLIM=`ulimit -l`
NOFILESLIM=`ulimit -n`
STACKLIM=`ulimit -s`
ulimit -l unlimited
ulimit -n 16384 --> 65536 へ
ulimit -s unlimitedこの変更後に pbs を再起動すれば反映されます
計算ノード毎に行う必要があるみたい