1

システムを監視し、定期的なログを印刷する長時間実行プロセスがあります。10〜15分以上実行すると、開いているファイルが多すぎますというメッセージが表示されて終了します。

プログラムは、2秒ごとにSIGUSR1を発生させるリアルタイムtimer_create()およびtimer_settime()を使用してセットアップされます。ハンドラーには、子に1つのfork()-exec()があります。親に待機があり、その後のmmap()と、/ proc / acpi / battery/stateおよび/sys/ devices / system / cpu/cpu0に対するストリーム操作があります。 / cpufreq/scaling_cur_freqおよびscaling_setspeedファイル。定期的なシグナルハンドラーと他のすべての場所でストリームFILE*ポインターを閉じるように注意しました。また、マップされたすべてのファイルのmunmap()を確認しました。

どうすればこれを回避できますか?許可される最大ファイル記述子を増やす必要がありますか、それともulimit -aSで示される最大オープンファイルを増やす必要がありますか?fclose()を使用してすべてのFILE *を閉じている場合、なぜこれが発生するのですか?

現在の私のシステムの値は次のとおりです。

#cat /proc/sys/fs/file-max
152808

#ulimit -aS
.
.
.
.
open files   (-n) 1024
4

1 に答える 1

3

lsofまたはデバッガーを使用して、プロセスが開いているファイルを見つけます。制限を増やすと、記述子が不足するポイントが遅れるだけです。

于 2009-07-27T16:24:29.377 に答える