マルチスレッドのプログラムがsocket(),recv()まわりで突然abortしていたが、glibcをupdateしたら直った | |
[C++] | |
2009年11月20日 21時18分の記事 | |
メールアドレスクリーニング機能付きのスマートメール配信ソフト (コードネーム:プリーズミスター)を開発している。 開発も終盤に差し掛かったところで大きなバグに出くわしてこの2 週間死闘を繰り広げていた。 現象は ?2時間程度するとアプリケーションが落ちる。 ?2時間程度するとDBなどへの外部接続ができなくなる。
?については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 https://kuruten.jp/blog/tb/goy2/98501 |