日頃の学習メモ。

概要

  • プログラムがアクセスするファイルや標準入出力などをOSが識別するために用いる識別子。
  • ファイルディスクリプタには、識別子とともにファイル名、ファイルサイズ、プログラムが操作中のファイル内の位置、ファイル作成、更新日時などの情報が含まれており、OSは識別子によってどのファイルを操作するかを判断する。
  • Solaris では、ユーザーアカウント毎に制限を行う。
  • リソース制限は、現在の (soft) 制限値と最大 (hard) 制限値の2 つの値のセットになっている。
  • ハード制限は、 /etc/system で変更することができる。

リミット値確認方法

Linux

cat /proc/sys/fs/file-nr
  • 左から、割り当て済みファイルディスクリプタ 、使用中ファイルディスクリプタ 、最大割り当て可能ファイルディスクリプタの順にて表示。

Solaris

ハードリミット
ulimit -Hn
ソフトリミット
ulimit -Sn
プロセス毎のFD情報を表示
pfiles プロセスID
  • 指定プロセスのファイルディスクリプタ情報が表示。
現在の制限値の表示(solaris10)
# limit
cputime         制限なし
filesize        制限なし
datasize        制限なし
stacksize       8192 kbytes
coredumpsize    制限なし
descriptors     256
memorysize      制限なし
強い制限値の表示(solaris10)
# limit -h
cputime         制限なし 
filesize        制限なし
datasize        制限なし
stacksize       制限なし
coredumpsize    制限なし
descriptors     65536
memorysize      制限なし
コマンド 説明
cputime プロセス当たりの最大 CPU 使用時間 (秒)
filesize 最大の単一ファイル容量。ファイルシステムのサイズに制限されています。
datasize K バイト単位のプロセスのヒープの最大サイズ
stacksize プロセスの最大スタックサイズ。デフォルトのスタックサイズは 2^64 です。
coredumpsize 最大コアダンプのファイルサイズ。ファイルシステムのサイズに制限されます。
memorysize 仮想記憶の最大サイズ

ファイルディスクリプタ情報確認方法

cronプロセスにおけるファイルディスクリプタ情報

# pfiles 287
287: /usr/sbin/cron
Current rlimit: 256 file descriptors
0: S_IFCHR mode:0666 dev:333,0 ino:6815752 uid:0 gid:3 rdev:13,2 ←標準入力
O_RDONLY|O_LARGEFILE
/devices/pseudo/mm@0:null
1: S_IFREG mode:0600 dev:32,4 ino:10405 uid:0 gid:0 size:16556 ←標準出力(/var/cron/log)
O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE
/var/cron/log
2: S_IFREG mode:0600 dev:32,4 ino:10405 uid:0 gid:0 size:16556 ←標準エラー出力(/var/cron/log)
O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE
/var/cron/log
3: S_IFIFO mode:0600 dev:32,0 ino:27217 uid:0 gid:0 size:0 ←cronデーモンが使う特別な名前つきパイプファイル
O_RDWR|O_LARGEFILE
/etc/cron.d/FIFO
4: S_IFIFO mode:0000 dev:341,0 ino:142 uid:0 gid:0 size:0
O_RDWR|O_NONBLOCK
5: S_IFDOOR mode:0444 dev:342,0 ino:58 uid:0 gid:0 size:0
O_RDONLY|O_LARGEFILE FD_CLOEXEC door to nscd[154]
/var/run/name_service_door
6: S_IFIFO mode:0000 dev:341,0 ino:142 uid:0 gid:0 size:0
O_RDWR
  • システムコールmknodにて指定されるファイルタイプ
説明
S_IFREG 通常のファイル (空のファイルとして作成される)
S_IFCHR キャラクタスペシャルファイル
S_IFBLK ブロックスペシャルファイル
S_IFIFO O (名前付きパイプ)
S_IFSOCK Unix ドメインソケット

「ファイルアクセスモード」 | 「ファイル作成フラグ」 | 「ファイル状態フラグ」

ファイルアクセスモード
説明
O_RDONLY 読み込み専用
O_WRONLY 書き込み専用
O_RDWR 読み書き用
ファイル作成フラグ
説明
O_CREAT ファイルが存在しなかった場合は作成 (create) する。modeでアクセス許可 (permission) を指定する。
O_EXCL この呼び出しでファイルが作成されることを保証する。
O_NOCTTY
O_TRUNC ファイルが既に存在し、通常ファイルであり、書き込み可モードでオープンされている (つまり、 O_RDWRまたはO_WRONLY の) 場合、長さ 0 に切り詰め (truncate) られる。
ファイル状態フラグ
  • fcntl(2) を使ってその内容を取得したり (場合によっては) 変更したりできる。
説明
O_LARGEFILE (LFS) off_t ではサイズを表せない (だだし off64_t ではサイズを表せる) ファイルをオープン可能にする。
O_APPEND ファイルを追加 (append) モードでオープンする。
O_NONBLOCK 可能ならば、ファイルは非停止 (non-blocking) モードでオープンされる。

変更方法

  • /etc/systemに以下を追加

set hard limit on file descriptors

set rlim_fd_max = 4096

set soft limit on file descriptors

set rlim_fd_cur = 1024

その他メモ

プロセスのプロセスIDを表示する。
pgrep プロセス名
プロセスでの使用ファイルディスクリプタ数カウント
# pfiles 25498 | perl -lne 'print if /^(\s+)([0-9]+)/' | wc -l
     111
プロセスの詳細情報を表示する。
/usr/bin/pcommand プロセスID
pcomand一覧
コマンド 説明 出力例
pcred プロセスの資格情報を表示する 10994: e/r/suid=5001 e/r/sgid=1005
pfiles プロセス内で開いているファイルに関する fstat 情報と fcntl 情報を表示する
pflags /proc 追跡フラグ、保留状態のシグナルと保持状態のシグナル、他の状態情報を出力する
pldd プロセスにリンクされている動的ライブラリを表示する
pmap 各プロセスのアドレス空間マップを表示する
psig 各プロセスのシグナルの動作とハンドラを表示する
prun 各プロセスを開始する
pstack 各プロセス内の LWP の 16 進とシンボルのスタックトレースを出力する
pstop 各プロセスを停止する
ptime microstate アカウントを使用してプロセスの時間を測定する
ptree プロセスを含むプロセスツリーを表示する
pwait プロセス終了後の状態情報を表示する
pwdx プロセスの現在の作業ディレクトリを表示する

Wiki内検索

Menu

ここは自由に編集できるエリアです。

Wikiをはじめる

マイページ