問題タブ [file-descriptor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C の読み取り/書き込みシステム コール用の標準入出力マクロはありますか?
すべての検索で何も返されませんでした。0 (stdout) と 1 (stdin) の代わりに、標準入出力の読み取り/書き込みシステム コールのファイル記述子として使用するマクロがないのは奇妙です。
私はそれらを見逃していますか、それとも本当に存在しませんか?
unix - 異なるプロセス間でファイル記述子を渡すためのポータブルな方法
ほとんどのUNIXシステムでは、プロセス間で開いているファイルを渡すことは、fork()によって子/親プロセスに対して簡単に行うことができます。ただし、子がすでにフォークされた「後」にfdを共有する必要があります。
sendmsg()が任意のプロセスで機能する可能性があることを示すWebページをいくつか見つけました。しかし、それは非常にOSに依存し、複雑に思えます。portlistenは私が見つけることができる最良の例のようですが、kqueue、pool、...のすべての魔法を隠すlibeventのような優れたラッパーライブラリを好みます。
これを行うためのライブラリ(およびポータブルな方法)があるかどうか誰かが知っていますか?
linux - ユーザー空間でのファイル記述子のシミュレート
ユーザー空間にソケットのようなオブジェクトを実装したいと思います。ポーリング可能でなければならないという重要な要件があります (つまり、select または poll 呼び出しを介して状態を照会できる必要があります)。
そのようなオブジェクトを実装するプラットフォーム中立的な方法はありますか?
Linux には、POLLIN も POLLOUT も強制的に通知する方法がないことを除いて、ニーズに適した種類の eventfd があることを認識しています。
c - C でファイル記述子からファイル名を取得する
Cでファイル記述子(Linux)のファイル名を取得することは可能ですか?
linux - Linuxでのファイル記述子の数の増加
システムを監視し、定期的なログを印刷する長時間実行プロセスがあります。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 *を閉じている場合、なぜこれが発生するのですか?
現在の私のシステムの値は次のとおりです。
file - N:1 ファイル記述子?
N 個のファイル記述子のいずれかで (つまり、N 個のソケットから) 受信したデータが、単一のファイル記述子で呼び出し元の API に転送され、実際には別のファイル記述子から来ている可能性がありますか? 書き込みを同様に抽象化することも可能ですか (ただし、正しい N 番目のファイル記述子に戻ります)?
linux - ソケットとファイル記述子の再利用 (またはその欠如)
以下のサーバーコードでソケットを呼び出した後、「開いているファイルが多すぎます」というエラーが表示されます。このコードは繰り返し呼び出され、server_SD が値 1022 を取得した直後にのみ発生します。そのため、「ulimit -n」で禁止されている 1024 の制限に達していると想定しています。私が理解していないのは、ソケットを閉じていることです。これにより、fd が再利用可能になるはずですが、これは起こっていないようです。
注: Linux を使用していて、クライアントも閉じています。いいえ、私は root ユーザーではないため、制限を移動することはできません。一度に最大 20 個 (またはそれくらい) のソケットを開く必要があります。私のプログラムの存続期間中に、1000000 近くのソケットを開いたり閉じたりすることが予想されます (したがって、非常に強力に再利用する必要があります)。
閉鎖と再利用性を保証する方法を知っている人はいますか?
ありがとう。
unix - 「lsof-l」のようにファイルハンドルを表示するにはどうすればよいですか?
私はコマンドを実行しました(ソース):
のように、ファイルハンドルを確認するにはどうすればよいlsof -l
ですか?
linux - Linux で特定のプロセスのオープン FD 制限を確認する
私は最近、ファイル ディスクリプタを「リーク」する Linux プロセスを使用しました。ファイル ディスクリプタを開き、一部を適切に閉じませんでした。
これを監視していれば、プロセスが限界に達していることを前もって知ることができました。
Ubuntu Linux システムで特定のプロセスの FD 使用率を確認する Bash または Python の良い方法はありますか?
編集:
開いているファイル記述子がいくつあるかを確認する方法がわかりました。プロセスに許可されているファイル記述子の数を知る必要があるだけです。一部のシステム (Amazon EC2 など) にはファイルがありません/proc/pid/limits
。
apache - socket: 開いているファイルが多すぎます (24) Apache ベンチ lighttpd
Apache Bench テストを開始すると:
ab -n 10000 -c 1300 http://domain.com/test.php
エラーが発生します:
socket: 開いているファイルが多すぎます (24)
「-c 1000」に変更すると、正常に動作します。
1000 人を超える同時ユーザーを持つことができるため、ソケットのオープン ファイルが多すぎる問題を修正するか、パラメータを増やしたいと考えています。これを行う方法と場所は?
centos 5でlighttpdを使用しています。