FC2ブログ

プログラムの不可思議

学生が夏休みを満喫している中、蒸し暑い室内で青い顔して実装している秀雄です。
エアコン28℃って結局汗かくからつける意味ないよな。IT企業なら1か0、暑いか寒いかでもの考えろよ。

あと、学生諸君に言っておく。
夏休みは死ぬ気で遊ぶべし。とにかく、自分が好きな事にとことん時間をかけたほうがいい。
ゲーム好きな奴はぶっ倒れるまでやるとかね。
社会人になったらこの先50年は3日ぐらいしか休みとれないんだぞ・・・。
夏らしいことなんて何らできないまま、気付くと季節が変わっているんだ。恐ろしい・・・恐ろしすぎる。

俺みたいに後悔しないために、色々やっておくべし。

前置きが長くなったが、ここからが本題。
最近不思議でしょうがないことがあったので、備忘録としてここに残しておく。

ctm3.png

まずはこれ。
1~100までのランダムな数字を1000回データベースに登録するプログラム。
for文の中でgetConnection...つまり、コネクションを1000個つくるっていうやばそうな書き方。

が、これくらいのプログラムは問題なく完走する。処理時間もサーバのマシンスペックを考えればそこまで遅くはない。

run.jpg

でも、コネクション1000個作るとか小学生までだよね~

とか先輩に注意されそうなので以下のように書いたところ・・・

ctm1.png

なんとOutOfMemoryで落ちる・・・。
outOfMemory.jpg

どどどどういうことだ??
なんで明らかにやばそうなコネクション1000個取得が完走して、ひとつのコネクションで登録を繰り返す方が落ちるんだろう。

試しにメモリ使用率とかを計測してみた結果、

コネクション1000個 CPU使用率:12% メモリ使用率:2%  (i=800までループした時点)
top2.jpg

コネクション1個 CPU使用率:93% メモリ使用率:27% (i=800までループした時点)
top.jpg

わからん。なぜここまで負荷に違いが出るのか。
もしかして1つめのソースはコネクション1000個作ってるように見えて、実はJVMがひとつしか参照していないとか・・・?
でもそうだとしたら2つ目のソースも問題なく動くはず・・・。

結局、色々ぐぐったけど明確な答えもなく、仕方なくコネクション1000個つくるっている気持ち悪い書き方しかできていない。

現場ではフレームワークを使って実装しているので、コネクションクローズとか特に意識する必要はないが、なんか特殊な処理をするために素のJavaで書きますってなると、この原因がわかってないのは怖い。

「秀雄くんの実装が糞でサーバが落ちました。明日からもう来なくていいです。」
とかやばすぎる。

でも1つ目のソースはちゃんと動くしリソース全然くってないし、別によくね?とか悪魔が囁くんだよな。
やばいわかんない・・・でも動くからいいやいやいやそこはちゃんとしないとダメでしょえ?え?うみゃぁ~

BENになっちゃうよぉおぉお~~~。

結論:動きゃいいや

-完-
スポンサーサイト

コメントの投稿

非公開コメント

そうそう動きゃいいのさ

負荷?可読性?知らんわボケ

No title

マユさんお久しぶりです。
コメントありがとうございます。

「動くものを作る」まずはそれからですよね。
プロフィール

DNeo

Author:DNeo
経営理念
1.お客様には最高の昇天を
2.お客様には最高の行動を
3.お客様には最高の笑顔を

ご来店、心よりお待ちしております
サミット川崎店並びにBENスタッフ一同

【所属団体】
日本川村学会
天地川村大明神信仰委員会
新興宗教組織「日本のみんな」教祖
横山精肉店スーパーバイザー

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR