過去の日記に書いた memcached を用いて機能を実装したサーバーのうち
いくつかの挙動がおかしいということで調査対応を行った。
・プログラム側にエラーログは全く出ていない
・httpd 生きてる
・memcached 生きてる
わけわからんと思いつつ
netstat で memcached のポートを見てみたら SYN だらけワロタw
プリッシュ「うおー!なんじゃこりゃーー!!」
まさにこの心境…
memcached デフォルト接続上限数 1024 が原因だった。
これを -c 2048 とし、解決。
MRTG に TCP/IP 接続数の追加を誓い、監視に移行した。
しかし謎なのは「いくつかの」挙動がおかしいという点。
・おかしいサーバー
・おかしくないサーバー(おかしくないわけないけど)
差異を洗い出してて気がついた。
動いてる memcached 用 PHP 拡張モジュール が違う。
今回の実装で memcached を用いるにあたり
各サーバーに PHP 拡張モジュールをインストールしたが
memcache.so は開発が止まったとのことで、memcached.so を採用した。
(まずこのネーミングを何とかしてほしいけど)
しかし、memcached.so のインストールに必要な libmemcached が
32bit CentOS サーバーには、インストールできなかった。
そのため、32bit CentOS では memcache.so を用いることにした。
「おかしくないサーバー」とは、こちらの方だった。
で、memcached.so と memcache.so の差は何か、という事だが
ちゃんとドキュメント読んでないから
ぶっちゃけようわからんけれどw
・memcache.so
接続待ちのとき、すぐあきらめる。
・memcached.so
接続待ちのとき、律義に待つ。
つまり、memcache.so は、接続待ちのとき
すぐあきらめて false 的要素を return してくる。
そのため、今回実装した memcached を用いた処理については
正常に機能はしないが、全体として止まる事は無い。
おかしくないように見えていただけで
今回実装した機能がスルーされていただけだった。
しかし、memcached.so は、ちゃんと待ってくれるので
動いてないように見える。(結果 httpd タイムアウトで死ぬ)
でもこの待ち時間については、しっかり設定できるようで
はっきり言って、そのあたりを無視していた僕が悪い。
言い訳ではないけど、やはり英語ができないのはキツイ。
上記の「ドキュメント読んでない」についても
英語だからという点が非常にネックであり
翻訳サイトなどを用いてしっかり内容を把握しようとすれば
半日~1日仕事になってしまう、たぶん。
先日も、ジュノで海外のプレイヤーに
「チョコボが野菜たべない、なぜ!?」と質問されたが
・ヴァナ時間で日またぎしないと進まないよ
・最初の2回は食べてくれないよ
たったこれだけの事が説明できなかったため
結局「ググれ^^」がベストな回答となってしまったw
というわけで、できるだけ英語を勉強するべきだと思った!
いくつかの挙動がおかしいということで調査対応を行った。
・プログラム側にエラーログは全く出ていない
・httpd 生きてる
・memcached 生きてる
わけわからんと思いつつ
netstat で memcached のポートを見てみたら SYN だらけワロタw
プリッシュ「うおー!なんじゃこりゃーー!!」
まさにこの心境…
memcached デフォルト接続上限数 1024 が原因だった。
これを -c 2048 とし、解決。
MRTG に TCP/IP 接続数の追加を誓い、監視に移行した。
しかし謎なのは「いくつかの」挙動がおかしいという点。
・おかしいサーバー
・おかしくないサーバー(おかしくないわけないけど)
差異を洗い出してて気がついた。
動いてる memcached 用 PHP 拡張モジュール が違う。
今回の実装で memcached を用いるにあたり
各サーバーに PHP 拡張モジュールをインストールしたが
memcache.so は開発が止まったとのことで、memcached.so を採用した。
(まずこのネーミングを何とかしてほしいけど)
しかし、memcached.so のインストールに必要な libmemcached が
32bit CentOS サーバーには、インストールできなかった。
そのため、32bit CentOS では memcache.so を用いることにした。
「おかしくないサーバー」とは、こちらの方だった。
で、memcached.so と memcache.so の差は何か、という事だが
ちゃんとドキュメント読んでないから
ぶっちゃけようわからんけれどw
・memcache.so
接続待ちのとき、すぐあきらめる。
・memcached.so
接続待ちのとき、律義に待つ。
つまり、memcache.so は、接続待ちのとき
すぐあきらめて false 的要素を return してくる。
そのため、今回実装した memcached を用いた処理については
正常に機能はしないが、全体として止まる事は無い。
おかしくないように見えていただけで
今回実装した機能がスルーされていただけだった。
しかし、memcached.so は、ちゃんと待ってくれるので
動いてないように見える。(結果 httpd タイムアウトで死ぬ)
でもこの待ち時間については、しっかり設定できるようで
はっきり言って、そのあたりを無視していた僕が悪い。
言い訳ではないけど、やはり英語ができないのはキツイ。
上記の「ドキュメント読んでない」についても
英語だからという点が非常にネックであり
翻訳サイトなどを用いてしっかり内容を把握しようとすれば
半日~1日仕事になってしまう、たぶん。
先日も、ジュノで海外のプレイヤーに
「チョコボが野菜たべない、なぜ!?」と質問されたが
・ヴァナ時間で日またぎしないと進まないよ
・最初の2回は食べてくれないよ
たったこれだけの事が説明できなかったため
結局「ググれ^^」がベストな回答となってしまったw
というわけで、できるだけ英語を勉強するべきだと思った!