daily memorandum 2.3.0

CBUG | FreeBSD | Hiki | Knoppix | Mac | Ruby | W-ZERO3 | Windows | ad | amd64 | ks | linux | momonga | net | print | security | tdiary | unix | www | 会社 | 鯖缶 | 全学ゼミ |


2005-03-03 (Thu)

_ [linux] システム中のファイルを開きすぎです

長くなりそうなので、自分とこに書こう。 ちなみに、以下 Linux kernel の version は 2.4.26 です。

えっと、まず結論に近いところから書くと、 fs/file_table.c の get_empty_filp() に

   if (files_stat.nr_files < files_stat.max_files) {

という部分があって、これが false だと get_empty_filp() は NULL を返すことになり *1、 従って do_pipe() (fs/pipe.c) で ENFILE が返ることになる。

ということで、次は files_stat.nr_files の値をどうやって見るかなのだけど、 これは kernel/sysctl.c を見ると、

   static ctl_table fs_table[] = {
       (略)
       {FS_NRFILE, "file-nr", &files_stat, 3*sizeof(int),
       0444, NULL, &proc_dointvec},
       {FS_MAXFILE, "file-max", &files_stat.max_files, sizeof(int),
       0644, NULL, &proc_dointvec},
       (略)

なんてコードがあって、/proc/sys/fs/file-nr を見れば、 files_stat (struct files_stat_struct) を表示してくれそうだとわかる。 試しに表示してみると、

   % cat /proc/sys/fs/file-nr
   1535    103     65528

ってな感じ。ちなみに、struct files_stat_struct の定義は

   struct files_stat_struct {
    int nr_files;           /* read only */
    int nr_free_files;      /* read only */
    int max_files;          /* tunable */
   };

となっているので(include/linux/fs.h), 1st column が問題の nr_files だということがわかる。

そんなわけで、現在開いているファイル数(というのは厳密な言い方じゃないかも) を見たければ、てきとーな時間間隔で /proc/sys/fs/file-nr を cat して 1st & 3rd column をチェキするのがよさげ。

*1 本当はこいつが true でも、次の kmem_cache_alloc() にしくると NULL が返るのだけど、今回は省略。

_ [FreeBSD] ports TODO

3/15 の ports freeze までにやっておきたいこと。優先度順。

  1. xpdf 何とかする。さすがに現状の ports の状態はいろいろとよろしくない(FreeBSD の IRC で「日本語使えねーぞ、ゴルァ」って話もあったし)。せめて [ports-jp 15508] のままでも commit してもらわないと。
  2. tamoさんの日記によると、結構前に mutt-1.5.7 が release されているみたいなので(どこが変わったのかは調べてないけど)、ports の方も上げておく。
  3. amd64 で kterm 動くようにする。まぁ、立ち上がらないってのは critical なので、freeze 後でも portmgr にゴネれば patch 突っこめるかな(アマイ?)。

週末はあと2回しかないので急がないといけないのだが、 体に力が入らないというか、無駄に時間が過ぎていく今日このごろ。 困ったもんだ。

[追記(3/5)] 2件、ほぼ片付いた

_ SHFS とか SFS とか

SFS は個人的には却下だと思ったので見てなかったのだけど *1、 SHFS の方はちょっと面白いかも。

  • 仕組みがシンプルそう。
  • client が cache を持てる。
  • "persistent connection (reconnect after ssh dies)" なんて書いてある。

ってところがちょっと魅かれた。

とはいえ、offline でマットウに使えそうな感じではないな。。。

*1 NFS キライ。:(

[]