nDiki : メモリリーク

メモリリーク - memory leak

  1. C や C++ を使っていると絶対といっていいほどやってしまうもの。

関連情報

2003年11月9日 (日)

[ WiKicker ] SpeedyCGI 対応するも……

WiKicker の高速化のために SpeedyCGI 対応作業。

  • Singleton パターンの除去
  • リクエスト処理後にデータベースunlock処理を必ず実施するようにする
  • DATAハンドルの読み込みを最初にキャッシュ

等を行う。 手元では動くようになった。

で今度は www.naney.org 上でテストしてみたのだが、無念 SpeedyCGI 自体がうまく動かない (FreeBSD 4.4-RELEASE + perl 5.005_03)。 CGI で呼び出すと

 failed to open log file
 fopen: Permission denied

エラー。make test でもこけているテストがあったし(t/sh_bang、t/timeout)このサーバじゃ動かんのかな?

と思ったら動いた

CGI スクリプトの先頭に

 #!/home/.../bin/speedy -w -- -M30 -t300 -r30 -p/home/.../bin/speedy_backend

のように記述していたのだが path部分が長かったため sh-bang の限界を越えてしまっていたようだ。-p オプションで指定している speedy_backend のパスの方はデフォルトが Makefile.PL 実行時に適切に設定されているはずだから、実際には省略可。

ということで、

 #!/home/.../bin/speedy -w -- -M30 -t300 -r30

としてみたら動いた。 よっしゃ。 これでリクエスト毎のプログラムのローディングの必要がなくなるので、レスポンスの遅さが改善されるはず。 パラメータは

  • -M30 (MaxBackends: これ以上だとサーバによろしくない?)
  • -t300 (Timeout: デフォルトの 3600=1時間だと長いかな。不要なプロセスは早めに止めておきたい)
  • -r30 (MaxRuns: まだバグメモリリーク等があるかもしれないので30回呼ばれたらバックエンドを re-exec するように)

としておく。様子をみて微調整。 これからは、WiKicker を更新したら Wiki CGI スクリプトを touch する事を忘れないようにしなくては(SpeedyCGI にバックエンドを再起動させなおさせるため)。

スポンサード リンク
[ 11月9日全て ]

2004年1月21日 (水)

[ Perl ] Devel::Size

WiKickerメモリ使用量が多くなってきた(10MBを越えることも)。 高速化を第一にそこら中で計算結果をキープするようになっているのだが、その辺整理しる必要があるな。

SpeedyCGIを使って複数回のアクセスで使用され続けるため、メモリリークが起きていないかも要確認。

[ 1月21日全て ]

2004年1月23日 (金)

[ Perl ] Devel::Cycle

WiKickerメモリ消費量を抑えるためにメモリリークチェック用モジュールをいくつか試してみる。

  • Devel::Leak - リークをチェックするコードの最初と最後にサブルーチンを呼ぶ。リークはアドレスで表示される。
  • Devel::LeakTrace - use すると勝手にプログラムのリークをチェックする。表示は Devel::Leak と同じタイプ。dh-make-perl でうまくパッケージ化できなかったので試すのやめ。
  • Devel::ObjectTracker - perl -d:ObjectTracker ... として使用。プログラム実行のトレースをファイルに書き出す。デフォルトで標準出力にメッセージを吐くのでCGI プログラムでは困る。実行時ディレクトリに .objecttracer というファイルを置きその中に $Devel::ObjectTracker::verbose = 0; と書いておけば最初から出力を抑制しておける。が、試してみたらセグメンテーションフォルト。
  • Devel::Cycle - 指定したリファレンスを辿り循環参照が無いかを検出するサブルーチンを提供。
  • Test::Memory::Cycle - 上記のテストハーネス用のインタフェース

結局うまく使えそうなのは、Devel::Cycle ぐらいかな。 循環参照を発見した場合の表示は見やすい。 WiKicker の何か所かでチェックしてみたけど、今のところ見つからず。

[ 1月23日全て ]

2010年7月1日 (木)

今日のさえずり: 定期券を更新する日。いつもちょっとドキドキする。

naney:4766831404

2010年07月01日

[ 7月1日全て ]

2011年2月21日 (月)

Visual C++ Win32 コンソールアプリケーションへのメモリリーク検出の埋め込み

Visual C++ 2005 で開発のプログラムがどうもメモリリークしているっぽい。 メモリリーク検出を仕込む方法のメモ

stdafx.h

デバッグバージョンのヒープ割り当て関数を使うようにするマクロ定義と crtdbg.h のインクルードをする。 メモリリーク情報ダンプの際にレポートにファイル名と行番号が出るように new を書き換えるマクロを定義する。

 // デバッグバージョンのヒープ割り当て関数を使うようにする。
 #ifdef _DEBUG
 #define _CRTDBG_MAP_ALLOC
 #include <stdlib.h>
 #include <crtdbg.h>
 #endif

 // _CRTDBG_MAP_ALLOC に関係なくプリコンパイルしたいもの。
 // かつ new を書き換えるとコンパイルが通らなくなるヘッダファイル群。
 #include <string>

 #ifdef _DEBUG
 // プリコンパイルするほどではないけど、
 // new を書き換えるとコンパイルが通らなくなるヘッダファイル群。
 // 例えば。
 #include <map>

 #define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
 #endif

 // プリコンパイルしていもの。
 #include <myproj/utility.h>

main 関数

終了時にメモリリーク情報をダンプさせるようにする。 また、コンソールアプリケーションの標準エラー出力にレポートが出力されるように設定する。

 int main(int argc, char* argv[]) {
   // 終了時にメモリリーク情報をダンプさせる。
   _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);


   // レポートをファイルに書き出させる。
   _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
   _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
   _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);

   // レポートを標準エラー出力に出力させる。
   _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
   _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
   _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);

   // 処理を開始。
   ...
 }

今日のさえずり: 「玄関開けたら2分でごはん」って韻が素晴らしいんだな

サトウのごはん コシヒカリ 200g×20個

2011年02月21日

  • 12:07 弁当 350円。 (@ 向日葵 和泉町店・カレー食堂) http://4sq.com/fkgq1o
  • 12:28 RT @weboo: AKBのカレンダーを剥がされただけで、職場がこんなに殺風景になるとは…
  • 12:38 先週金曜日に外部サイト連携を設定してmixiチェックに流せるようにしてから、はてなブックマークまたぼちぼち使ってる。 http://bit.ly/eEMIud
  • 14:03 メモリリークの香りがプンプンする。
  • 14:26 CryptoAPI の件、CryptAcquireContext が「署名が無効です。」エラーを返してた。これから調査する。
  • 14:31 0x80090006L、NTE_BAD_SIGNATURE。
  • 16:27 結局 CryptoAPI はやめて、別の MD5 実装を使うことにした。
  • 16:37 マージしないで git branch -D しちゃうとそのコミットが gitk で表示されなくなるので見つけにくくなるな。とりあえず墓標タグ打っておいた。 #Git
  • 17:30 缶コーヒー 100円。
  • 19:36 ついに対応! RT @mixi_PR: Android端末のスマートフォンからも新規ユーザー登録が可能になりました!   http://mixi.co.jp/press/2011/0221/4338
  • 19:48 mixi Developer登録の携帯メールアドレス変更のドメイン候補には gmail.com とか追加されてないな。
  • 19:52 Android からの mixi 新規登録、やはりキャリアのメールアドレスが必要。
  • 19:52 iモード端末が不要になったのはいいね。
  • 20:20 「玄関開けたら2分でごはん」って韻が素晴らしいんだな。
  • 22:13 「『パケ・ホーダイ ダブル』ご契約者の場合、『パケ・ホーダイ フラット』はお申込みいただいた翌月からの適用となります。」と書いてあるな。自分の場合、3月15日以降に申し込んで4月から適用という流れだな。
  • 23:34 SL4A (sl4a_r3.apk) インストール。 #Android
  • 23:42 SL4A 起動して [View] - [Interpreters] して [Add] - [Perl 5.10.1] して perl_for_android_r1.apk をダウンロードしてインストール。#Android
  • 23:43 Perl for Android 起動して [Install] ボタン押して perl_r9.zip ダウンロード中。1647952bytes #Android
  • 23:46 perl_extras_r7.zip も自動的にダウンロードされた。 #Android
  • 23:51 SL4A 起動したらサンプル Perl スクリプトが追加されてた。 http://flic.kr/p/9jWt6E
  • 24:02 ATOK トライアル試用期間がもうすぐ終わると通知に出たけれど、製品版はいつ出るのかな? #Android
  • 24:54 QuickSSHd インストールして PC から XperiaSSH で入れるようにした。 #Android
  • 24:57Emacs + TRAMP で直接ファイルを編集しようと思ったんだけれど失敗。/bin/sh が無いからか。 #Android
[ 2月21日全て ]

2011年2月22日 (火)

今日のさえずり: お茶碗にご飯を1/3残すのより数粒残す方が罪悪感がある

2011年02月22日

  • 10:21 「ちゃんこ鍋をつつく会」参加エントリした。
  • 12:08 炭火焼牛カルビ弁当 498円。 (@ セブン-イレブン 神田佐久間町店) http://4sq.com/e2lnJF
  • 15:18 type_info::name() 呼ぶとメモリリークとして検出される。
  • 15:54 Windows 7 はタスクバーを最背面表示にできないのか?
  • 17:14 ミーティングソフトウェアメトリクスが出たと思ったら「コメント行数」とか出てきてげんなりした。
  • 17:29 RT @atok_js: 【Android向けATOK Trial版をご利用の方へ】試用期間終了の案内が出ているかと思いますが、近日中には今後のご案内をさせていただきます。ちょっとしたサプライズを用意していますのでお楽しみに!#atok4android
  • 20:26 XperiaBash が欲しいな。クロスコンパイルするか。
  • 20:28 Panasonic ノート PC にかじられたリンゴのステッカー貼っている人発見。
  • 21:27 (例えば体調が悪くて)お茶碗にご飯を1/3残すのより、(同じ条件で)数粒残す方が罪悪感があるのはなんだろうねぇ。
  • 24:30 Android NDK で Bashビルドが通らないなあ。
  • 25:56 アイロンかけたし、ぼちぼち。
[ 2月22日全て ]

2011年2月23日 (水)

今日のさえずり: std::string をメンバに含む構造体を memset でクリアしている輩を発見

2011年02月23日

  • 10:36 今日も集中的にメモリリークつぶし。
  • 11:59 std::string をメンバに含む構造体を memset でクリアしている輩を発見。メモリリークはオマエだ!
  • 12:07 おにぎり 325円。 (@ ファミリーマート 神田佐久間町店) http://4sq.com/hDSmqT
  • 14:39 _CrtSetBreakAlloc 思いのほか重宝している。
  • 17:06 退勤。
  • 21:39 RT @otsune: 秋元才加の「出産の十月十日前に」発言を厳密に計算すると perl -MDateTime -e'print DateTime->new(year=>2011,month=>4,day=>2)->subtract(days ...
  • 22:07 カップルでマスクしているのカワイイ。品川駅で見かけた。
  • 23:20 風呂で寝ない方法を知りたいのです。
  • 23:23 不慮の事故とかこわい。風呂の事故とかこわい。でも眠い。
[ 2月23日全て ]

2011年2月24日 (木)

今日のさえずり: 何で今日はオフィスのみんなが Facebook やってるの? 何かを超えたの?

2011年02月24日

  • 06:50 ATOK for Android製品発表は今日のNTTドコモ製品発表にタイミングを合わせるため止めていると予想。
  • 10:35 Google Chrome 拡張も別プロセスなのか。
  • 11:26 「クラス宣言だけしか読んでないソースファイル内で delete してたのでデストラクタが呼ばれなくてメモリリーク」を C++ のコードで発見して潰した。あれぇなんで C4150 出てなかったんだ?
  • 12:10 弁当 350円。 (@ 向日葵 和泉町店・カレー食堂) http://4sq.com/hEDCFU
  • 12:13 prove の範囲でのメモリリークを全部潰した。おいしくお昼ごはんが食べられる。
  • 12:16 Android 用の ATOK は結局6月30日までトライアル版延長か。
  • 12:26 RT @atok_js: 予告させていただいた通り、大きく3つのポイントがあります。1. 利用期間を6月まで延長 2. 3キャリアそれぞれのTrial版を公開 3. マッシュルーム対応です。 http://ow.ly/42jZY #atok4android
  • 12:26 RT @atok_js: それと、基本的な機能も大きく強化しています。濁点/半濁点や半角スペースのフリック入力、本体メモリ使用量を削減、キーサイズの設定追加など、書ききれないぐらいの機能強化を施しています。#atok4android
  • 12:30 ATOK for Android のキーサイズ「小さく」に設定した。縦方向の誤打は今までほとんどないので。横幅が広くなるといいのだけれど、そうすると POBox Touch の真似するしかないのかな。 #atok4android
  • 13:37 「さくらのVPS 1G」月額1,480円。512MB は心もとなさそうで手を出さなかったけれど、1GB だといいんじゃない? http://bit.ly/i22R4o
  • 13:41 RT @yapcasia: 【仮】YAPC::Asia Tokyo 2011 は 10/13, 10/14, 10/15の予定。会場が決定していないのでまだ変更の可能性はあります。
  • 14:50 液晶プロジェクタの交換用ランプ定価44,625円か。結構するな。
  • 15:23 交換用ランプ買うなら新しいの買ったらという話になってる。
  • 17:21 RT @atok_js: 【初めてATOK for Androidをご利用される方へ】キーボード右側の矢印はフリックで上下左右に向きを変えることができます。カーソルの移動が楽になると思いますので試してくださいね。#atok4android
  • 17:48 何で今日はオフィスのみんなが Facebook やってるの? 何かを超えたの?
  • 18:19 ティオ 100円。
  • 18:35 Locale::Maketext で po ファイルを使うやり方。言語別にパッケージ作って %Lexicon 作るより管理が楽そう。 / Perl でつくった web サイトを L10N する方法 - TokuLog 改メ tokuh… http://htn.to/en3XyA
  • 19:02 「高速化に着手する。」
  • 19:41 みんなそろそろエイプリルフールの準備始めてるのかな。
  • 20:11 予想よりは高速化の結果はちょっぴりだった(そんなもん)。
  • 20:51 RT @tekiomo: PHPエラーメッセージでググるとそのエラーが実際に出ているページがひっかかる仕様をどうにかしてもらいたい
  • 20:59 あ、同時プリント受け取り忘れてる。
  • 21:59 せっかくいい記事だなと思ってmixiチェックボタンを押したのに、mixi Plugin のサービス設定で「~をチェックしました。オススメです!」ってなるように定型文設定されてて萎えた。オススメ押し売りすぎ。
  • 22:39 RT @zakwa: 飲みの誘いを断る事に「申し訳ない感」よりも「勿体ない感」が明らかに強いのはなぜだろう。
  • 24:36 自分が昔買ったのより付属品が増えてて楽しそう。 / ASCII.jp:昔懐かしいD&Dの「赤箱」が最新版になって復活! http://htn.to/AHPa1X
[ 2月24日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.306929s / load averages: 0.83, 0.68, 0.69
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker