Hinemosu
行きすぎた最先端を目指す hide10 の個人ブログ
さくらのVPS、Apacheチューニング
興味のないヒトにはくどいでしょうが、本日も「さくらのVPS|VPS(仮想専用サーバ)はさくらインターネット」にUbuntuでLAMP環境を構築し、その上でWordPressを動かすオハナシです。
なかなか安定運用に持って行けてませんが、http無応答時にコンソールを覗くと、Apacheさんが「Out of memory」を吐きまくっていることに気がつきました。
Out of memoryについて
まず「Out of memory」に付いて調べました。
linuxの初期設定では総メモリ容量(実メモリ+Swap)以上の実効メモリ容量を要求された場合、実際には足りないのに大らかな気持ちで要求を受入れてしまうそうです。
結果として必要なメモリが足りない事態が発生した場合、適当なプロセスをkillしてしまうそうで、これを行うのが「Out Of Memory Killer」ことOOM Killerさんのお仕事で、OOM Killerさんが吐くエラーが「Out of memory」として表示されていたようです。
OOM Killer概要:
Out Of Memory Killerのこと。Linuxのデフォルトの動作では、プロセスがメモリを要求した場合、総メモリ使用量が実メモリ+swap以上であっても、ある程度許可するようになっている。これは、各プロセスが要求したメモリをすべて使うわけではないという経験的な法則により、できるだけ多くのプロセスを起動するためにそのように動作になっているようである。そのため、あるプロセスが確保できたはずのメモリを使おうとし、実際にメモリが足りない場合カーネルが適当なプロセスを選択し、そのプロセスをkillしてしまうことをOut Of Memory Killerという。
Apacheのチューニング
OOMエラーを理解することにより、Apacheの「なにか」がメモリを浪費しているのでは無いか?というアタリを付けました。
なぜApacheさんがメモリを食いまくっているか?と言う根本的な理由は分からないですが、取りあえずの対策としてApacheの設定をチューニング。
/etc/apache2/apache2.confを開き、mpm_prefork_moduleの設定を以下のように変更しました。
<ifmodule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 34 MaxRequestsPerChild 4000 </ifmodule>
一番大きく変更したのは「MaxClients」の値です。初期値では150になっていましたが、省メモリ環境での運用であることを踏まえ、34に制限してみました。これで良い変化があると良いんだけどな~。
Apacheのチューニングに付いては、『さくらのVPSのその後@2010-10-25 | それでも地球はまわっている』や、『[Slicehost] OOM Killer(Out Of Memory Killer)の対策 – delab』を参考にしています。貴重な情報ありがとうございます。
WordPress: mixiチェックに対応した
mixiの新サービス「mixiチェック」に対応しました。
個別記事ページの本文上、日付などが書かれている行の右端に「チェック」と書かれたボタンがあると思います。
このボタンを押すと、mixiでのアナタの「チェックリスト」に、ウチのブログが「チェック」されますので、遠慮せず2万回ぐらい押してみてください。
でもこれ、ぶっちゃけ誰も押してくれない気がするよ…ボタン名の「チェック」も気に入らない。「イイネ」のが意味の通りが良いと思うんだけどなぁ。
WordPress: 『読むための所要時間』を表示するコード書いた
「たった一行追加するだけでサイトの滞在時間を13.8%伸ばす方法・・・ – IDEA*IDEA ~ 百式管理人のライフハックブログ」で紹介されていた、『読むための所要時間』を表示するコードをマルチバイト対応してみたよ。
使ってみたいヒトは、下記のコードをテンプレートの適当なところに貼り付けてください。
<?php $mycontent = $post->post_content; // wordpress users only $word = mb_strlen(strip_tags($mycontent)); $m = floor($word / 400); $s = floor($word % 400 / (400 / 60)); $est = ($m == 0 ? '' : $m . '分') . ($s == 0 ? '' : $s . '秒') . 'ぐらい' ; ?> この記事を読むのに必要な時間の目安: <?php echo $est; ?>
上記コードでは1分間に読める文字数を400と仮定しています。気に入らなかったら、適当に増やしたり減らしたりしてみてください。
分単位で切り上げ表示を行うバージョンも作成しました。こちらの方がそれっぽいかな?
<?php $mycontent = $post->post_content; // wordpress users only $word = mb_strlen(strip_tags($mycontent)); $m = floor($word / 400) + 1 ; $est = $m . '分ぐらい' ; ?> この記事を読むのに必要な時間の目安: <?php echo $est; ?>
注意点としては、本文中に誤ったHTMLコードがあると、「strip_tags関数」がガッツリタグを削除して「読む時間」がゼロ秒になったりします。「The W3C Markup Validation Service」あたりを利用して、正しいコードを書くように心がけてください。
Facebookの「いいね!」ボタンを付けてみた
うちのブログにも、Facebookの「いいね!(Like)」ボタンを付けてみました。
本文直下にこんなの →() があると思いますので、Facebookアカウントをお持ちの方は容赦なくクリックして頂けると幸いです。
多分に実験的な雰囲気を醸しだしておりますので、誰も押してくれないと拗ねて廃止するかも知れません。だからみんな秒速2万回ぐらい押しちゃってね!
「いいね!」ボタンの実装は、WordPress用プラグイン「Like」を利用しています。プラグインを有効化するだけボタンが設置できるので、気になるヒトは軽やかにお試ししてみるのもアリかもよ。
WordPress 3.0: Commented entry listの動作不具合修正
ブログソフトウェア「WordPress」のバージョンを3.0に上げたら、愛用していたプラグイン「Commented entry list」が動かなくなってしまったので、ソースを修正して対応したよ。
問題点
うちのブログのサイドバーには「最近のコメント」というのが表示されてるんだけど、ここは前述のプラグイン「Commented entry list」が表示している部分なのね。
ところがWordPress本体を3.0にアップデートしたら、最近のコメントとして「No Response」しか表示されなくなってしまいました。
原因調査
さっそく原因を調査したところ、「WordPress3.0リリース&Commented entry listが動かなくなった場合の対処方法。 | ごみおきば」経由で、「WordPress 3.0 RC1 日本語版 リリース ≪ REIMA’s Blog」に到達。
曰く、Commented entry listで「$tablecommentsと$tablepostsにテーブル名が入っていない」のが原因らしい。
解決方法
Commented entry listのソースを修正して、$tablecommentsと$tablepostsに正しい値が入るようにすれば良いみたい。
具体的にはget_recently_commented関数と、get_recently_trackbacked関数の先頭で変数定義を行っているので、この2ブロックを変更するようです。
元ソースはこんな感じ。
function get_recently_commented($limit = 10) { global $wpdb, $tablecomments, $tableposts; : : function get_recently_trackbacked($limit = 10) { global $wpdb, $tablecomments, $tableposts;
上記2ブロックの関数先頭にある変数定義を、以下のように書き換えます。
function get_recently_commented($limit = 10) { global $wpdb; $tablecomments = $wpdb->comments; $tableposts = $wpdb->posts; : : function get_recently_trackbacked($limit = 10) { global $wpdb; $tablecomments = $wpdb->comments; $tableposts = $wpdb->posts;
これで無事にプラグインが正常に動作するようになりました。良かった、良かった。
Twiiter用、はてブ用の大きめボタンを設置した
ブログ記事の下部に、「twitterにつぶやくボタン」と「はてブする」機能を持つ、ワリと大きめのボタンを設置しました。
このボタンにより、当ブログは「iPad対応」を果たしたことを、ここに高らかに宣言します!
WordPress: コメントあるの?ないの?
WordPressのハナシ。
発端は分からないんだけど、ふと気がつくとコメントの承認待ちが有るのか無いのか分からない変な状態になっていた。
「承認待ち(1)」と表示されるのに、「承認待ちのコメントはありません」ってどういうコト?なにかのキャッシュが腐ってるのかと思ったけど、ブラウザ変えたり環境変えたり1日待っても同じまま。
特段実害があるワケじゃないけど、なんだか気持ち悪くてイヤだなぁ…
と、ここまで書いてからピンと来た!「ゴミ箱」に入ってる記事が原因だ!
先日うっかり書きかけの記事を上げちゃって、その記事が自動でTwitterにポストされちゃって、さらに自動でTwitterコメントが記事に書き込まれたんだけど、そのコメントを処理せずに記事自体をゴミ箱に入れたんだよね。
で、承認待ちのコメントがあるんだけど、ゴミ箱にある記事だから記事一覧には表示されず、と言う状態になってたらしい。
解決策としては、ゴミ箱を空にして該当記事を削除すればオッケーだった。あースッキリした。
WordPress: トラックバック元のタイトルを短く表示する
最近、徐々にトラックバックされることが増えてきたんだけど、その時にトラックバック元の表示が長くなりすぎるコトがあるのが気に入らなかったのよね。
例えば、直近の外部からのトラックバックタイトルは『それでも地球はまわっている ブログ「それでも地球はまわっている」は、こんな内容を扱っています』なんだけど、これをそのままタイトルとして表示すると、長すぎて画面からハミ出てしまうわけです。
そこでちょっと細工して、タイトルが長すぎる場合は 後半を[…]に差し替えて短く表示するようにしてみました。
【この記事の続きを読む →】
WP Super CacheとKtai Styleを併用する方法
WP Super CacheとKtai Styleを併用する方法をメモっておくよ。
いつものようにブログのリファラーチェックをしていたら「CORESERVERとWP Super CacheとKtai Style」なるサイトからPingが飛んできていることに気がついた。
曰く、「CoreserverでWP Super CacheとKtai Styleを併用するのに苦労した」と言うことらしい。さいわい当ブログ経由で「WPtouchとWP Super Cacheを併用する || 新・ガジェット! gadget!! あーんど Mac!!!」に辿り着き、解決方法を見いだせた模様。
そんな流れの中、ウチのブログでも改めて「WP Super CacheとKtai Styleを併用する方法」をメモっておくね。
【この記事の続きを読む →】
WordPress「エラー: データベースに接続できません」をカスタマイズ!
WordPressでデータベースに接続できない場合のエラー表示「エラー: データベースに接続できません」をカスタマイズしてみたよ。
最近、ブログへのアクセスが多く、ちょっと油断すると「エラー: データベースに接続できません」が表示されてしまう次第。キャッシュの設定を変えたり、表示自体を軽くしたりと試行錯誤はしてるけど、ちょっと油断すると落ちてしまいます。ごめんねごめんね~。
さてさて。落ちるのはサーバ側でなんとかするとして、見ている人に「エラー: データベースに接続できません」と表示するだけでは、何が起きているのか意味が通じないだろうし、味気ないことこの上ない。
そんなわけでWordPressのデータベース接続エラー画面をカスタマイズしてみました!
WordPress: XreaからCoreserverへの移動移行変更引っ越し手順
WordPressを利用していて、XreaからCoreserverへ移動/移行/引っ越しする際の手順をメモっておくよ。
XreaもCoreserverもサーバアカウント、データベースは作成済みで、且つ移行前後のドメイン名やDB設定は同一であることを仮定しています。要はホントの「サーバ引っ越し」ね。
「XreaからCoreserver」を想定してるけど、「XreaからXrea」や「CoreserverからCoreserver」でも同じ手順で出来ると思うよ。
WordPress: Xrea/CoreserverでのWP-phpMyAdminの使い方
WordPressの管理画面からデータベースを操作できるようになる「WP-phpMyAdmin」プラグインの使い方をメモっておくよ。
サーバ環境はXrea/Coreserverを想定していますが、PhpMyAdminのインストール方法以外はサーバに係わらず共通の手順だと思います。

WordPress:「トラックバック送信先」に送れない問題が解決した
WordPress: oEmbedテスト第2弾、flickr編
WordPressのoEmbedテスト第2弾、今度はflickr編です。上の画像は「http://www.flickr.com/photos/hide10/4208542002/」と一行書いただけ。そうすると画像が勝手にロードされるって寸法さ。
簡単に表示されるのは良いんだけど、画像サイズとかリンクとか表示位置が指定できないので、まだちょっと使いにくいかなー。「設定」の「メディア」で最大サイズは指定できるみたいだけど、これだけじゃオイラには機能不足だ。
閑話休題。ちょっと勘違いしてたんけど、WordPressがスゲエってよりもoEmbedってプロトコルがすごいんだね。oEmbedでサービス側にURLを投げると、埋め込み用のコードを返してくれるみたい。これはニコニコ動画にも対応して欲しいトコロ。
あと、まだ良く分かってないけど、JSONとかXMLで返って来るみたいだから、自分好みに整形することも出来そうな気がするな。WordPressが貼り付けようとするembedタグをフックするプラグインとかできるかな?暇を見て研究してみよう。