問題タブ [diagnostics]
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# - プロセス メモリ サイズ - 異なるカウンター
自分の .Net サーバー プロセスが使用しているメモリの量を調べようとしています (監視とログの目的で)。
私は使用しています:
ただし、Process オブジェクトには、使用されているメモリ領域を読み取ることができるいくつかの異なるプロパティがあります。Paged、NonPaged、PagedSystem、NonPagedSystem、Private、Virtual、WorkingSet です。
そして、「ピーク」:これは、これらの最後のピークがこれまでに取った最大値を保存するだけだと推測しています。
各プロパティの MSDN 定義を読んでも、あまり役に立ちませんでした。メモリの管理方法 (ページングと仮想に関する限り) に関する私の知識は非常に限られていることを認めなければなりません。
したがって、私の質問は明らかに「どちらを使用する必要がありますか?」であり、答えは「場合による」であることはわかっています。
このプロセスは基本的に、起こっていることのメモリに一連のリストを保持しますが、他のプロセスはそれと通信し、何かを照会します。これが実行されるサーバーが大量の RAM を必要とすることを期待しているので、内部に保持されているリストのサイズと比較して RAM 要件を推定できるように、このデータにクエリを実行しています。
だから...どれを使うべきですか?なぜですか?
.net - 実動 .NET デスクトップ プログラムでのアプリケーション ハングの診断
私は問題を抱えています。私が開発しているアプリケーションのユーザーの 1 人が、時折、しかし定期的にアプリケーションのハングを経験しています。
これが発生すると、マシンのイベント ログに「アプリケーション ハング」のソースを含むエントリが見つかります。情報メッセージは、「アプリケーション [my app]、バージョン [正しいバージョン] をハングしています。モジュール hangapp、バージョン 0.0.0.0 をハングしています。アドレス 0x00000000 をハングアップします。」
アプリケーションがスローする未処理の例外をすべてログに記録していますが、これが発生してもログ ファイルにはエントリがありません。
私の現在の作業仮説は、アプリケーションが安全でないレガシー API を呼び出しているときに、このハングが発生しているというものです。これは私を驚かせません。私はこの API を何年も使用してきましたが、これまでハングしたことはありませんでしたが、本当にくだらないコードです。また、プログラムがランダムにハングするように見えるというユーザーの報告。これは真実ではないと思います。私が彼女を信じていないわけではありませんが、従来の API と対話するコードは、BackgroundWorker によって呼び出されるメソッド内で実行されています。バックグラウンド スレッドがアプリケーションをハングさせていた場合、これはユーザーにとってランダムに発生しているように見える可能性があります。
では、2 つの質問があります。1 つは具体的なもので、もう 1 つは一般的なものです。
具体的な質問: 非 UI スレッドで実行されているメソッドがハングした場合、スレッドが強制終了されるだけだと思います。それは実際にアプリケーション全体を殺しますか?
一般的な質問:
未処理の例外はすべてログに記録しています。私のプログラムは既にトレースを使用するように設定されています (ただし、疑わしいメソッドのアクティビティをトレースするには、インストルメンテーション コードを追加する必要があります)。他にやるべきことはありますか?.NET アプリケーションがハングしたときにクラッシュ後の分析を可能にする診断ツールはありますか? より多くの (そしてより使いやすい) データを取得するために呼び出すことができる .NET フレームワーク内のメカニズムはありますか?
編集: 私のコードを詳しく調べると、BackgroundWorker の使用はすべて、例外ハンドラーで呼び出されたメソッドをラップする、実装したユーティリティ クラスを介して行われていることを思い出しました。このハンドラーは例外をログに記録し、それをユーティリティ オブジェクトのプロパティとして返します。UI スレッドの完了イベント ハンドラーが例外を再スローし (コール スタックを失ったので、理想的とは言えませんが、既にログに記録されています)、UI のメインの例外ハンドラーが例外をメッセージ ボックスに報告し、終了します。アプリ。
そのようなことは何も起きていないので、バックグラウンド スレッドで例外がスローされることはないと確信しています。とにかく、.NET 例外はありません。
さらなるフォローアップ:
幸いなことに、ユーザーから十分なデータを取得して、レガシー API 内でハングが発生していないことを確認しました。これは、明らかに私が間違っていることを意味します。つまり、私はそれを修正できるので、勝ちます。また、トレースによって問題を切り分けることができることも意味します。これは、もう 1 つのメリットです。この質問に対する回答にとても満足しています。私は、おそらくこの問題にそれらを必要としないことをさらに嬉しく思います.
また、PostSharp は優れています。インストルメンテーション コードを既存のアプリケーションに追加する必要がある場合は、ほぼ確実にそれを使用する必要があります。
sql-server - デバッグせずにアプリからSQLServer接続情報を取得しますか?
クローズドソースのサードパーティASP.NETアプリケーションでのSQLServer2005接続の問題のトラブルシューティングを行っています。アプリケーションは.NETアプリケーションであり、開発会社はSQLServer認証情報を格納するカスタム形式の構成ファイルを使用しています。
SQL Serverボックスに接続しようとすると、アプリケーションで「データベース'データベース名'を開けません。ユーザー'ユーザー名'のログインに失敗しました」というエラーが発生します。SQL Server ManagementStudioとアプリに提供されたログイン情報を使用してWebサーバーからSQLServerボックスに接続することをテストしましたが、完全に機能します。
SqlCommand内で使用しようとしているSQLServer接続情報をスニッフィング/判別する簡単な方法はありますか?コードはリリースモードでコンパイルされており、ソースがないため、コードのデバッグはオプションではありません。アプリが接続できない理由を特定できるものが必要です。
java - CompositeDataにはkeys()メソッドがありませんか?
JMXを使用して、リモートプロセスからの診断情報を保存しています。jconsoleでインターフェースを見ると、戻りタイプがCompositeDataであることがわかります(データは実際にはCompositeDataSupportとして返されます)。このオブジェクトに関連付けられているすべてのキーと値のペアを出力したいと思います。
問題は、インターフェイスに「values()」メソッドがあり、キーを取得する方法がないように見えることです。ここで何かが足りませんか?このタスクに取り組む他の方法はありますか?
ありがとう!
c# - C# でスタック上の変数のリストを取得できますか?
スタック上の変数とその値のリストを取得することが .NET/C# で可能かどうか疑問に思っていますか? アプリの例外ハンドラーを作成していますが、標準のスタック トレースを超えて、スタック上にある変数の名前と値も確認したいと考えています。これができるかどうか、何か考えはありますか?
.net - .NET でのプロセス情報の取得
この質問の複製。
更新- これは正確な複製ではありません。私の解決策を見てください。
プロセス エクスプローラーに java.exe プロセスが表示されます。それをダブルクリックすると、その作業ディレクトリと開始コマンド ライン引数が表示されます。
.NET から次のコードを実行し、同じ PID を持つプロセスを取得しますが、上記のフィールドは空です。どうやら、これは文書化されています。
では、プロセス メモリを手動で覗き込むことなく、正しい startinfo フィールド値を取得するにはどうすればよいでしょうか(つまり、プロセス メモリを自分でハックするのではなく、どこかからこのコードを盗みたいのです)。
c# - C# ランタイム アプリケーションの診断
私は ac# GUI を開発していますが、利用可能な (できれば無料の) 実行時診断プログラムがあるかどうか疑問に思っていました。
私が探しているのは、GUI とのユーザーのやり取りと、いつどの関数が呼び出されるかを監視する方法です。デバッグ コードのスタックを追加したくないのは、探しているバグの動作を変更する可能性があるためです。
現在、私はSpy ++を使用していますが、これとデータのスタックを生成するのは初めてなので、少し重いと感じています。
c# - C#で別のプロセスのコマンドライン引数を読み取る方法は?
別のプロセスのコマンド ライン引数を取得するにはどうすればよいですか?
クラスの静的関数を使用してSystem.Diagnostics.Process
、実行中のプロセスのリストを名前などで取得できます。
ただし、このプロセスを開始するために使用されるコマンド ラインにアクセスする方法はありません。どうすればそれを行うことができますか?
.net - MS Windows OS のバージョン番号を .NET の製品名に変換する方法は?
MS Windows OS のバージョン番号を製品名に変換する方法は?
たとえば、.NET では、次の 2 つのプロパティを使用して、製品が MS Windows Vista Ultimate Edition であることを確認できます。
Environment.OSVersion.Platform returns Win32NT
Environment.OSVersion.Version returns 6.0.6001.65536
.net - log4net と TraceSource
このスレッドでは、多くの人が log4net を使用していることを示しています。私は TraceSources のファンであり、log4net が使用される理由を知りたいです。
私がトレースソースを好む理由は次のとおりです。
- プラグ可能なリスナー - XML、TextFile、Console、EventLog、独自のロール
- カスタマイズ可能なトレース スイッチ (エラー、警告、情報、詳細、開始、終了、カスタム)
- カスタマイズ可能な構成
- Logging Application Block は、TraceListeners の大きなセットにすぎません
- アクティビティ/スコープの相関 (たとえば、ASP.NET 要求内のすべてのログを特定の顧客に関連付ける)
- Service Trace Viewer を使用すると、これらのアクティビティに対するイベントを個別に視覚化できます
- すべて app.config/web.config で設定できます。
.NET フレームワークは内部で TraceSource を使用するため、一貫した方法でトレースを構成することもできます。log4net では、TraceSource だけでなく log4net も構成する必要があります。
log4net は、TraceSources が提供しない (または、いくつかのカスタム TraceListeners を作成することによって実行できなかった) ことを教えてくれますか?