問題タブ [memory]
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++ - Win32 でのヒープの破損。見つける方法は?
ヒープを破損しているマルチスレッドC++ アプリケーションで作業しています。この破損を特定するための通常のツールは適用できないようです。ソース コードの古いビルド (18 か月前) は最新のリリースと同じ動作を示します。欠点としては、ソース デルタを使用して、バグがいつ導入されたかを特定できません。リポジトリには多くのコード変更があります。
クラッシュ動作のプロンプトは、このシステムでスループットを生成することです。つまり、内部表現に変更されたデータのソケット転送です。アプリに定期的に例外を発生させる一連のテスト データがあります (さまざまな場所、さまざまな原因 - ヒープ割り当ての失敗など: ヒープの破損)。
この動作は、CPU パワーまたはメモリ帯域幅に関連しているようです。マシンのそれぞれが多ければ多いほど、クラッシュしやすくなります。ハイパースレッディング コアまたはデュアルコア コアを無効にすると、破損の割合が減少します (ただし、完全にはなくなりません)。これは、タイミング関連の問題を示唆しています。
問題は次のとおりです:
軽量のデバッグ環境 (たとえばVisual Studio 98 / AKA MSVC6
) で実行すると、ヒープの破損はかなり簡単に再現できますalloc;
。洗練されたデバッグ環境 (Rational Purify、VS2008/MSVC9
または Microsoft Application Verifier でさえ) システムはメモリ速度の制約を受け、クラッシュしません (メモリの制約: CPU が を超えていない50%
、ディスク ライトが点灯していない、プログラムが可能な限り高速に動作している、ボックスが1.3G
2G の RAM を消費している) . したがって、問題を再現できる (ただし原因は特定できない) か、原因または再現できない問題を特定できるかの選択肢があります。
次の場所に関する私の現在の最良の推測は次のとおりです。
- 非常に汚れたボックスを取得します (現在の開発ボックスを置き換えるには: 2Gb RAM に
E6550 Core2 Duo
); これにより、強力なデバッグ環境での実行時に誤動作を引き起こすクラッシュを再現できるようになります。また - 演算子
new
andを書き換えて、 anddelete
を使用し、使用が終了したらすぐにメモリを読み取り専用としてマークします。実行して、解放されたメモリに書き込んでいる悪者を OS に捕まえさせます。はい、これは絶望のしるしです。一体誰が書き直しているのですか?! これにより、Purify などと同じくらい遅くなるのだろうか。VirtualAlloc
VirtualProtect
MSVC6
new
delete
いいえ、Purify インスツルメンテーションを組み込んで出荷することはできません。
同僚がちょうど通り過ぎて、「スタック オーバーフローですか? 今、スタック オーバーフローが発生していますか?!?」と尋ねました。
そして今、質問:ヒープ破損者を見つけるにはどうすればよいですか?
更新: バランスが取れてnew[]
おりdelete[]
、問題の解決に向けて長い道のりを歩んでいるようです. アプリがクラッシュするまでに 15 分ではなく、約 2 時間かかるようになりました。まだありません。さらに提案はありますか?ヒープの破損が続く。
更新: Visual Studio 2008 でのリリース ビルドは劇的に優れているようです。現在の疑惑は、にSTL
付属する実装にかかっていVS98
ます。
- 問題を再現します。
Dr Watson
さらなる分析に役立つ可能性のあるダンプが生成されます。
私はそれをメモしておきますが、ワトソン博士がつまずくのは事後であって、ヒープが踏みつけられたときではないことを懸念しています.
別の試み
WinDebug
は、非常に強力であると同時に軽量でもあるデバッグツールとして使用することです。
現時点では、これもうまくいきました。何かがうまくいかない限り、あまり助けにはなりません。行為中の荒らしを捕まえたい。
おそらく、これらのツールを使用すると、少なくとも問題を特定のコンポーネントに絞り込むことができます。
私はあまり希望を持っていませんが、絶望的な時代が求められています...
また、プロジェクトのすべてのコンポーネントが正しいランタイム ライブラリ設定 (
C/C++ tab
VS 6.0 プロジェクト設定のコード生成カテゴリ) を持っていることを確認しますか?
いいえ、そうではありません。明日、ワークスペース (58 個のプロジェクト) を調べて、それらがすべてコンパイルされ、適切なフラグでリンクされていることを確認するのに数時間を費やします。
更新: これには 30 秒かかりました。ダイアログですべてのプロジェクトを選択し
Settings
、適切な設定を持たないプロジェクトが見つかるまで選択を解除します (それらはすべて適切な設定を持っていました)。
iphone - Understanding reference counting with Cocoa and Objective-C
I'm just beginning to have a look at Objective-C and Cocoa with a view to playing with the iPhone SDK. I'm reasonably comfortable with C's malloc
and free
concept, but Cocoa's references counting scheme has me rather confused. I'm told it's very elegant once you understand it, but I'm just not over the hump yet.
How do release
, retain
and autorelease
work and what are the conventions about their use?
(Or failing that, what did you read which helped you get it?)
c++ - メモリ管理、ヒープ破損、およびC ++
だから、私はいくつかの助けが必要です。私はC++でプロジェクトに取り組んでいます。しかし、どういうわけかヒープを壊してしまったと思います。std::string
これは、クラスにを追加し、別のクラスから値を割り当てたという事実に基づいていstd::string
ます。
スタックダンプでシステムがクラッシュします。したがって、基本的には、コードとメモリ管理のすべてを停止して調べ、どこで失敗したかを見つける必要があります。コードベースはまだ小さい(約1000行)ので、これは簡単に実行できます。
それでも、こういうのは頭がおかしいので、捨てようと思いました。私はLinuxシステムを使用していて、をいじくり回しましvalgrind
た。私が何をしているのか完全にはわかりませんstd::string
が、のデストラクタは無効なフリーであると報告されました。Google検索から「ヒープの破損」という用語を取得したことを認めなければなりません。この種のものに関する一般的な目的の記事も同様にいただければ幸いです。
(前にrm -rf ProjectDir
、C#でもう一度やり直してください:D)
編集:私はそれを明確にしませんでしたが、私が求めているのは、この種のメモリの問題を診断するためのアドバイスです。std :: stringのものが正しいことを知っているので、それは私がやったことです(またはバグですが、Selectに問題はありません)。私が書いたコードをチェックでき、非常に賢い人ならすぐに問題を見つけることができると確信していますが、この種のコード分析を私の「ツールボックス」に追加したいと思います。
javascript - Firefox 3のJavaScript用のある種のタスクマネージャー?
最近、UbuntuHardyHeronのFirefox3で問題が発生しています。
リンクをクリックすると、しばらくハングします。Firefox 3のバグなのか、クライアント側のJavaScriptを実行しすぎているページなのかはわかりませんが、少しデバッグしてみたいと思います。
それで、私の質問は、「Firefox 3のために、ある種のプロセスエクスプローラー、またはタスクマネージャーのようなものを用意する方法はありますか?」です。
そのページ(またはCPU /メモリの使用を引き起こしているページ内のすべて)のJavaScriptを介して、どのタブがプロセッサの何パーセントを使用しているかを確認できるようにしたいと思います。
これを行うプラグイン、または同様のプラグインを知っている人はいますか?他の誰かがこの種の検査を別の方法で行ったことがありますか?
FireBugについては知っていますが、どのタブが多くのリソースを使用しているかを特定するためにFireBugをどのように使用するか想像できません。
何か提案や洞察はありますか?
c++ - C++ のセキュア メモリ アロケータ
次の属性を持つメモリを提供するアロケータを作成したいと考えています。
- ディスクにページングできません。
- 接続されたデバッガーからアクセスするのは非常に困難です
これには、ユーザーがアクセスできない機密情報 (ライセンス情報など) が含まれるという考えです。私はオンラインで通常の調査を行い、これについて他の何人かの人々に尋ねましたが、この問題を開始するのに適した場所を見つけることができません.
アップデート
JoshVirtualAlloc
は、メモリ空間に保護を設定するために使用することについて言及しています。カスタム アロケータを作成しました (以下を参照) 。このVirtualLock
関数を使用すると、割り当てることができるメモリの量が制限されることがわかりました。ただし、これは仕様によるものと思われます。私は小さなオブジェクトに使用しているので、これは問題ではありません。
と使用されます
Ted Percivalは mlock について言及していますが、私はまだそれを実装していません。
Neil Furguson と Bruce SchneierによるPractical Cryptographyも非常に役に立ちました。
asp.net - 非実稼働環境での負荷関連のクラッシュの複製
イントラネットでカスタムアプリケーションを実行していますが、最近アップグレードした後、IISが100%のCPU使用率でハングし、リセットが必要になるという問題が見つかりました。
ユーザーをハングアップさせるのではなく、解決策を決定する間、以前のリリースにロールバックしました。最初のステップは問題を再現することですが、再現することはできません。
ここにいくつかの背景があります:
Prodには、2つのCPUと2 GBのRAMを備えた単一の仮想化(vmware)Webサーバーがあります。データベースサーバーには4GBがあり、CPUも2つあります。これもVMWareにありますが、物理ハードウェアは別です。
通常の使用中、アプリケーションは正常に実行されます。w3wp.exeプロセスは通常、5〜20%のCPUと約200MBのRAMを使用します。CPUとRAMは通常の使用ではわずかに変動しますが、異常なことは何もありません。
ただし、問題が発生し始めると、RAMは劇的に上昇し、CPUは98%(または可能な限り)にペグします。サイトが応答しなくなり、IISを再起動する必要があります。この状況では、アプリプールをリセットしても何も起こりません。完全な、IISの再起動が必要です。
夜間は発生しません(使用なし)。サイトに負荷がかかっている場合に多く発生しますが、ピーク時以外の場合にも発生します。
この問題を解決するための最初のステップは、それを再現することです。負荷をシミュレートするために、JMeterを使用して使用状況をシミュレートし始めます。ロードスクリプトは、クラッシュ時の実際の使用量に基づいています。JMeterを使用すると、使用量をかなり高くすることができます(クラッシュ時の負荷の2〜3倍)が、サイトは正常に動作します。CPUが高く、サイトが遅くなりますが、メモリ使用量は合理的で、何もハングしていません。
非本番環境でこのような問題を再現するためのヒントはありますか?エラーを再現し、解決策を決定してから、もう一度テストして解決したことを確認したいと思います。その過程で、問題を解決する可能性のある改善された小さな点がいくつか見つかりましたが、問題を再現して改善されたバージョンをテストできれば、私は本当に自信が持てるようになります。
どんなツール、テクニック、理論も大歓迎です!
c - OS Xで他のプロセスのメモリを読んでいますか?
Mac OS X で他のプロセスのメモリを読み取る方法を理解しようとしてきましたが、うまくいきません。ptrace
withなどを使用してオンラインで多くの例を見てきましたが、BSD [ ]PEEKDATA
にはそのオプションがありません。man ptrace
Mac OS X で別のプロセスのメモリを読み書きするにはどうすればよいですか?
.net - .NETWebサービスでデータを永続化するための最良の方法
このjsonファイルからデータをクエリするWebサービスがありますが、Webサービスが毎回ファイルにアクセスする必要はありません。Webサービスが次に同じデータをクエリしようとしたときに、そこからデータを取得できるように、データを別の場所(おそらくメモリ)に格納できるのではないかと考えています。何をする必要があるのかは理解できますが、実際にどのように行うのかわかりません。Webサービスでデータを永続化するにはどうすればよいですか?
更新: 静的変数のキャッシュと使用の両方の提案は、見栄えがします。たぶん、最初に1つを確認できるように両方を使用する必要があります。そこにない場合は、2つ目を使用します。どちらにも含まれていない場合は、jsonファイルを確認します。
.net - .net でクラスを破棄するには?
.NET ガベージ コレクターは最終的にメモリを解放しますが、そのメモリをすぐに戻したい場合はどうすればよいでしょうか。MyClass
呼び出すクラスで使用する必要があるコードは何ですか?
の変数とオブジェクトによって使用されているすべてのスペースを解放しますMyClass
か?
.net - アタッチされた動作によるメモリ リークの防止
Enterキーを押して次のコントロールに移動できるようにする「アタッチされた動作」をWPFアプリケーションで作成しました。私はこれを EnterKeyTraversal.IsEnabled と呼んでいます。コードはこちらのブログでご覧いただけます。
私の主な懸念は、UIElements で PreviewKeyDown イベントを処理していて、イベントを明示的に「フック解除」することがないため、メモリ リークが発生する可能性があることです。
このリークを防ぐための最善の方法は何ですか (実際にリークがある場合)? 管理している要素のリストを保持し、Application.Exit イベントで PreviewKeyDown イベントをアンフックする必要がありますか? 独自の WPF アプリケーションでアタッチされた動作に成功し、洗練されたメモリ管理ソリューションを思いついた人はいますか?