Solarisでファイルリークと対応するスタックを検出する方法はありますか?私は情報がLinux上のvalgrindによってうまく報告されていることを知っています。 Solarisにもツールがあるかどうか教えてください。Solarisでファイルリークとそれに対応するコードを検出する方法は?
答えて
Linuxでは、あなたは、すべてのファイルにオープンと近いの呼び出しをログに記録するstraceを使用することができます。次に、リソースリークのログを分析することができます。の番号をにすると、の番号がと一致する必要があります。これが真実でない場合は、漏れがあります。 Solarisには同様のツール - DTraceがあります。
'dtrace'は特に' strace'の近くにありません。実際、Solarisの_ straval_と 'strace'は' truss'です(同じことをする2つのコマンドラインオプションの多くまで)。 Linuxの 'dtrace'にインスパイアされた機能は、SystemTap、' stap'&friendsです。 –
また、漏れに関するいくつかの有益な情報を得るためにいくつかの簿記を行う必要があります。リークされたファイル記述子が開かれたスタックトレース(または少なくともソースコードの場所)。もちろん、あなたは 'dup()'などもカバーする必要があります。したがって、straceまたはtrussは、スタックトレース/位置情報を取得できないため、十分ではありません。 – maxschlepzig
Solarisでは、単にpfiles
コマンドを使用するだけで、現在開いているプロセスのファイル記述子を見ることができます。オープン/クローズされているファイルを追跡する場合は、ファイル関連のシステムコール用のフィルタ(truss -e open,close
がありますが、それにはファイル記述子を作成するものがあります)を使用する(Solarisの場合はstrace
と同じです)があります。
pfiles
出力が大きくなる場合は、まず漏洩しているファイルが通常のファイルか、ソケット/パイプなのかを特定します。通常のファイルが漏れている場合は、dtrace
スクリプトを使用できます。以下は自分の実験のための基礎ですが、私は現在、それを試して改良するためにSolarisシステムを手にしていません。下記参照。
#!/usr/bin/dtrace -s
syscall::open:entry { self->t = ustack(); }
syscall::open:return /arg0 >= 0/ { trackedfds[arg0] = self->t; }
syscall::open:return { self->t = 0; }
syscall::close:entry { self->t = arg0; }
syscall::close:return /arg0 >= 0/ { trackedfds[self->t] = 0; }
syscall::close:return { self->t = 0; }
END { printa(trackedfds); }
これは、そのコンテンツopen()
システムコール時にusersideのスタックトレースであるファイル記述子番号によって索引付け連想配列を構築します。クローズが成功すると、指定されたファイル記述子番号のエントリは破棄され、プログラムが終了すると(またはスクリプトが停止されている場合)、連想配列の残りの内容が出力されます - 残っていればリークの候補になります。
END {}
プローブがこの場所に適切でない可能性があります。 proc::exit
などが必要な場合があります。これは、プログラムの終了時に終了したクリーンアップの前または後で(プログラムを終了/強制終了すると、すべてのファイル記述子が閉じられ、trackedfds[]
配列が消去される)、いつトリガされるかによって異なります。だからこそ私はこれが出発点であると言ったが、Solarisシステムなしではチェックすることはできない。
このスニペットには2つの問題があります:1)連想配列(集計とは異なります)はdtraceで印刷できません。ステートメントを印刷することでサポートされておらず、ループステートメントがないので反復できません。2)このように右側にutrace()は許されません。それは集計キーとして、そしてスタンドアローンとしては良いですが、式としてではありません。 – maxschlepzig
- 1. solarisでライブラリファイルを検索するには?
- 2. どのようにHTTP応答コードを検出するには?
- 3. ラズベリーパイをArduinoコードにUSB接続で対応させる方法
- 4. はどの学年レベルを検出し、Javaで、それに反応する
- 5. Pythonでデータフレームからパターンを検索し、対応する値を抽出する方法はありますか?
- 6. jQuery:その場でウィンドウの幅を検出する方法は?
- 7. リストボックスのデータとそれに対応する値をテキストボックスにXMLに保存する方法
- 8. Firefox OpenSearch検索エンジンアドオンをモバイル対応としてマークする方法は?
- 9. 対応するビットのオフィスバージョンを検出するVBA
- 10. WPFクラスとそれに対応するビジュアルスタイルの継承
- 11. 真と偽に対応するシーケンスを生成する方法
- 12. jquery ajaxエラーデータを取得する方法とそれは正しい対応ですか?
- 13. LinuxまたはSolarisではCキーを使用して矢印キーを検出する方法は?
- 14. モバイルウェブブラウザとその画面サイズを検出する方法
- 15. マルチディメンションインデックスとそれに対応する値を保存するための最良の方法R
- 16. love2dゲームに対応する方法
- 17. Solarisのviエディタで複数の文字列を検索する方法は?
- 18. セルに対応するイメージリストを作成する方法は?
- 19. は、メソッドを振っ検出xcode4で検出揺れ方法を検出する方法xcode4
- 20. ガイド付きアクセスを検出するか、それに反応しますか?
- 21. レールでビューに対応するモデルを作成する方法
- 22. バッファとそれに対応するファイルの違いを表示するコマンド
- 23. 移動方向に対する電話の向きを検出する方法
- 24. d3階層エッジバンドルでソースノードとそのすべてのターゲットノードと対応するリンクをハイライトする方法
- 25. HTML5対応ブラウザーが検出された場合、HTML5対応のFlashエクスペリエンスをスレーブ
- 26. 1つのクラスに対する新規の検出方法SVM
- 27. スキーマ対応XQueryをセットアップする方法
- 28. Visual StudioでJavascriptの構文エラーを検出する方法コード
- 29. ファイルと対応するIDを取得する方法
- 30. フィルタの後にTextmateがコードを検出する方法:coffeescript?
ファイルリークとは何ですか? –
ファイルリークは、ソケットまたはファイルディスクリプタを開いて閉じないシナリオです。同じコードが何度も呼び出され、ファイルが漏洩する可能性があります。 – yogishaj
用語は**リソースリーク** –