質問

私はシステムを監視し、定期的なログを出力し、長い実行中のプロセスを有します。私はそれより長い10〜15分間実行してみましょう場合は、というメッセージで終了します。 開いているファイルが多すぎます。

プログラムには2秒ごとにSIGUSR1を上げるリアルタイムtimer_createを使用してセットアップ()およびtimer_settime()です。ハンドラでは、1本のフォーク()がある - のexec()子で親とその後のmmap()とストリーム操作の/ proc / ACPI /バッテリー/状態にし、/ SYS /デバイス/システム/ CPU / CPU0での待ち時間があります/ cpufreqを/ scaling_cur_freqとscaling_setspeedファイル。 私は定期的なシグナルハンドラでは、他のすべての場所でストリームファイル*ポインターを閉じるように世話をしてきました。私はまた、すべてのマップされたファイルのと、munmap()を確保しています。

どのように私はこの問題を回避することができますか? 私は、許容される最大ファイル記述子を増やす必要がありますか、私はulimitの-asによって示される最大開いているファイルを増やす必要がありますか? 私はFCLOSEを使用して、すべてのFILE *を閉じていた場合、なぜこの出来事はある()?

ここでは、今のように私のシステムのための値であり、

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

#ulimit -aS
.
.
.
.
open files   (-n) 1024
役に立ちましたか?

解決

あなたのプロセスを開いているファイルを見つけるためにlsofを使用するか、またはデバッガ。制限値を大きくすると、ちょうどあなたが記述子が不足した時点を遅らせるされます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top