別マシンのDBの死活チェックをスレッド立てて定期的に行っています

 ※C++でADOと使用してDBアクセス

ここで、DBに接続する為のCreateInstanceは行っているが、
Releaseを行っていませんでした

この際、57000回程度の動作の後に落ちます

勿論、修正すべき点は判ったのですが、これで落ちる理由
(CreateInstanceの限界個数 等)の裏付けが、見当たりま
せん

事由を説明・証明出来る裏付け資料は無いでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/05/18 14:30:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pyopyopyo No.2

回答回数377ベストアンサー獲得回数98

ポイント35pt

搭載メモリではなく、ハンドルが不足したのだと思います。

ハンドルの個数には上限があって、その個数の上限はOSとregistryの設定で決まります。

詳細は下記URLが詳しいです

http://technet.microsoft.com/ja-jp/windows/ee787049.aspx

同様の手順で、DBへ接続する度にハンドルがどれだけ消費されるかを調べれば、57000回程度で落ちる理由がはっきりすると思います。

あと、プログラム側で、きちんとエラーチェックする事をおすすめします。CreateInstance()の失敗時に、GetLastError() 等のAPIでエラーコードを調べれば、詳細な原因が判るはずです。

http://msdn.microsoft.com/ja-jp/library/cc428944.aspx

http://msdn.microsoft.com/ja-jp/library/cc428939.aspx

その他の回答1件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント35pt

Releaseを 行っていなかったということは オブジェクト ポインタへの参照を解放していなかったことになります。

つまり、メモリをどんどん消費しまくっていたということですね。

で、そのうち CreateInstanceを行っても メモリを 取得できなくなってしまうため エラーとなるのでしょう。

メモリ使用量の推移を確認してみてください。

なお 限界は 搭載している使用可能なメモリによって 変わってくるものと思われます。

http://msdn.microsoft.com/ja-jp/library/9e31say1%28VS.80%29.aspx

id:gin106

私も”そう”思ったのですが・・・・

サーバー機でも駄目駄目マシンでも期間に違いは有りません

本当にメモリ取得出来ないから落ちると言う図式なのでしょうか?

2010/05/11 14:56:18
id:pyopyopyo No.2

回答回数377ベストアンサー獲得回数98ここでベストアンサー

ポイント35pt

搭載メモリではなく、ハンドルが不足したのだと思います。

ハンドルの個数には上限があって、その個数の上限はOSとregistryの設定で決まります。

詳細は下記URLが詳しいです

http://technet.microsoft.com/ja-jp/windows/ee787049.aspx

同様の手順で、DBへ接続する度にハンドルがどれだけ消費されるかを調べれば、57000回程度で落ちる理由がはっきりすると思います。

あと、プログラム側で、きちんとエラーチェックする事をおすすめします。CreateInstance()の失敗時に、GetLastError() 等のAPIでエラーコードを調べれば、詳細な原因が判るはずです。

http://msdn.microsoft.com/ja-jp/library/cc428944.aspx

http://msdn.microsoft.com/ja-jp/library/cc428939.aspx

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません