日頃の学習メモ。

概要

  • プログラムがアクセスするファイルや標準入出力などを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最大の単一ファイル容量。ファイルシステムのサイズに制限されています。
datasizeK バイト単位のプロセスのヒープの最大サイズ
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_IFIFOO (名前付きパイプ)
S_IFSOCKUnix ドメインソケット

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

ファイルアクセスモード
説明
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各プロセスを停止する
ptimemicrostate アカウントを使用してプロセスの時間を測定する
ptreeプロセスを含むプロセスツリーを表示する
pwaitプロセス終了後の状態情報を表示する
pwdxプロセスの現在の作業ディレクトリを表示する

このページへのコメント

vW7pSy Major thanks for the article.Thanks Again.

0
Posted by awesome things! 2014年01月20日(月) 20:31:15 返信

7ud4e8 Im thankful for the blog post.Much thanks again. Want more.

0
Posted by watch for this 2013年12月20日(金) 10:28:03 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

Menu

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

管理人/副管理人のみ編集できます