このブログのトップへ こんにちは、ゲストさん  - ログイン  - ヘルプ  - このブログを閉じる 
マルチスレッドのプログラムがsocket(),recv()まわりで突然abortしていたが、glibcをupdateしたら直った
[C++]
2009年11月20日 21時18分の記事

メールアドレスクリーニング機能付きのスマートメール配信ソフト
(コードネーム:プリーズミスター)を開発している。

開発も終盤に差し掛かったところで大きなバグに出くわしてこの2
週間死闘を繰り広げていた。

現象は
?2時間程度するとアプリケーションが落ちる。
?2時間程度するとDBなどへの外部接続ができなくなる。

【PR】電話相談システム開発ならイーステム



?についてはSMTPサーバへの接続のためのソケットをクローズせず
に捨てていたことが原因だった。こちらは比較的すぐ解決したが致
命的なのは?。

いろいろ試してみたが、送信するメール数が多いとき(400通程
度)は12時間以上稼動しても問題なし、メールが極端にすくない
場合(1通)も問題なし。メールが20件程度のときに突如として
アプリケーションが落ちるのである。

ソースを上から下まで見直したがとくにおかしなところもなし。ど
うしようかと困っているときにglibcについてのRedHatのバグ情報
を見つけた。

------------------------------------------------------------

http://www.jp.redhat.com/support/errata/RHBA/RHBA-2009-1017J.html

このアップデートでは、次のバグが修正されています。

* アーキテクチャによっては、数百ものスレッドを伴う大きなアプリケーションを使用したときに、_mcount()関数またはソケットシステムコールによって、スタックポインタが破損したり、ヒープ破壊やアプリケーションのセグメンテーションフォールトが発生したりする可能性がありました。このアップデートでは、_mcount()関数やソケットシステムコールでスタックポインタが正しく計算され、この問題が解決されています。

* pthread_condattr_setclock()にバグがあったため、POSIXスレッドを使用する特定のアプリケーションで問題(やハング)が発生しましたが、これは解決されました。

----------------------------------------------------------------------------

アプリケーションの性質上マルチスレッドを多様していた。しかし使っているCentOSにはパッチ適用後のglibc-2.5-34は既にインストール済み。。。

実機と並行してテストに使っていたVMwareには次のバージョン glibc-2.3.42が入っていて上の現象はみられていない。glibc-2.3.42のリリース情報には影響ありそうなものはなかったが。。。

だめもとで


yum update glibc


今のところ現象はでていません。

?の現象でおちたときのglibcのメッセージは下記

*** glibc detected *** ./PleaseMister: double free or corruption (fasttop): 0xb2e3fc60 ***
======= Backtrace: =========
/lib/libc.so.6[0x9660f1]
/lib/libc.so.6(cfree+0x90)[0x969bc0]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x3521571]
./PleaseMister[0x806009b]
./PleaseMister[0x80600c0]
./PleaseMister[0x8060128]
./PleaseMister[0x806bc23]
./PleaseMister[0x808575e]
./PleaseMister[0x807c5aa]
./PleaseMister[0x807d552]
./PleaseMister[0x807ebf1]
./PleaseMister[0x8053798]
/lib/libpthread.so.0[0xa7749b]
/lib/libc.so.6(clone+0x5e)[0x9ce42e]
======= Memory map: ========
00110000-0014b000 r-xp 00000000 fd:00 16221639 /lib/libsepol.so.1
0014b000-0014c000 rwxp 0003a000 fd:00 16221639 /lib/libsepol.so.1
0014c000-00156000 rwxp 0014c000 00:00 0
002bb000-002c4000 r-xp 00000000 fd:00 16220200 /lib/libnss_files-2.5.so
002c4000-002c5000 r-xp 00008000 fd:00 16220200 /lib/libnss_files-2.5.so
002c5000-002c6000 rwxp 00009000 fd:00 16220200 /lib/libnss_files-2.5.so
005ee000-00634000 r-xp 00000000 fd:00 26259215 /usr/lib/libmysqlpp.so.3.0.9
00634000-00636000 rwxp 00045000 fd:00 26259215 /usr/lib/libmysqlpp.so.3.0.9
00677000-0068d000 r-xp 00000000 fd:00 16221640 /lib/libselinux.so.1
0068d000-0068f000 rwxp 00015000 fd:00 16221640 /lib/libselinux.so.1
00691000-006a4000 r-xp 00000000 fd:00 16221636 /lib/libnsl-2.5.so
006a4000-006a5000 r-xp 00012000 fd:00 16221636 /lib/libnsl-2.5.so
006a5000-006a6000 rwxp 00013000 fd:00 16221636 /lib/libnsl-2.5.so
006a6000-006a8000 rwxp 006a6000 00:00 0
006b0000-006b2000 r-xp 00000000 fd:00 16221637 /lib/libkeyutils-1.2.so
006b2000-006b3000 rwxp 00001000 fd:00 16221637 /lib/libkeyutils-1.2.so
007e9000-007f8000 r-xp 00000000 fd:00 16221638 /lib/libresolv-2.5.so
007f8000-007f9000 r-xp 0000e000 fd:00 16221638 /lib/libresolv-2.5.so
007f9000-007fa000 rwxp 0000f000 fd:00 16221638 /lib/libresolv-2.5.so
007fa000-007fc000 rwxp 007fa000 00:00 0
0081b000-0081c000 r-xp 0081b000 00:00 0 [vdso]
00822000-00824000 r-xp 00000000 fd:00 16221641 /lib/libcom_err.so.2.1
00824000-00825000 rwxp 00001000 fd:00 16221641 /lib/libcom_err.so.2.1
00884000-0088c000 r-xp 00000000 fd:00 26251621 /usr/lib/libkrb5support.so.0.1
0088c000-0088d000 rwxp 00007000 fd:00 26251621 /usr/lib/libkrb5support.so.0.1
0088f000-008b4000 r-xp 00000000 fd:00 26257787 /usr/lib/libk5crypto.so.3.1
008b4000-008b5000 rwxp 00025000 fd:00 26257787 /usr/lib/libk5crypto.so.3.1
008da000-008f4000 r-xp 00000000 fd:00 16220165 /lib/ld-2.5.so
008f4000-008f5000 r-xp 00019000 fd:00 16220165 /lib/ld-2.5.so
008f5000-008f6000 rwxp 0001a000 fd:00 16220165 /lib/ld-2.5.so
008fd000-00a3b000 r-xp 00000000 fd:00 16220188 /lib/libc-2.5.so
00a3b000-00a3d000 r-xp 0013e000 fd:00 16220188 /lib/libc-2.5.so
00a3d000-00a3e000 rwxp 00140000 fd:00 16220188 /lib/libc-2.5.so
00a3e000-00a41000 rwxp 00a3e000 00:00 0
00a43000-00a68000 r-xp 00000000 fd:00 16220230 /lib/libm-2.5.so
00a68000-00a69000 r-xp 00024000 fd:00 16220230 /lib/libm-2.5.so
00a69000-00a6a000 rwxp 00025000 fd:00 16220230 /lib/libm-2.5.so
00a6c000-00a6e000 r-xp 00000000 fd:00 16220208 /lib/libdl-2.5.so
00a6e000-00a6f000 r-xp 00001000 fd:00 16220208 /lib/libdl-2.5.so
00a6f000-00a70000 rwxp 00002000 fd:00 16220208 /lib/libdl-2.5.so
00a72000-00a85000 r-xp 00000000 fd:00 16220216 /lib/libpthread-2.5.so
00a85000-00a86000 r-xp 00012000 fd:00 16220216 /lib/libpthread-2.5.so
00a86000-00a87000 rwxp 00013000 fd:00 16220216 /lib/libpthread-2.5.so
00a87000-00a89000 rwxp 00a87000 00:00 0
00a96000-00aa8000 r-xp 00000000 fd:00 26249306 /usr/lib/libz.so.1.2.3
00aa8000-00aa9000 rwxp 00011000 fd:00 26249306 /usr/lib/libz.so.1.2.3
00aab000-00bcc000 r-xp 00000000 fd:00 26772695 アボートしました

このブログへのチップ   0pts.   [チップとは]

[このブログのチップを見る]
[チップをあげる]

このブログの評価
評価はまだありません。

[このブログの評価を見る]
[この記事を評価する]

◆この記事へのコメント
コメントはありません。

◆コメントを書く

お名前:

URL:

メールアドレス:(このアドレスが直接知られることはありません)

コメント:




◆この記事へのトラックバック
トラックバックはありません。
トラックバックURL
https://kuruten.jp/blog/tb/goy2/98501
くる天
プロフィール
いーブログ@田町-ブロくる
goy2 さん
いーブログ@田町
地域:東京都
性別:男性
ジャンル:仕事 IT
ブログの説明:
田町で働くITエンジニアのブログです。
カテゴリ
全て (4)
C++ (3)
Mysql (0)
アクセス数
総アクセス数: 12161
今日のアクセス: 1
昨日のアクセス: 2
RSS