WordPressの投稿が異常に遅い場合はQuery Monitorを使おう!

ポイ探ニュースでも利用しているWordPressですが、投稿時に異常な負荷がかかり、投稿完了までにかなりの時間がかかっていました。

ロードアベレージを見ても10~30程度。サイトへのアクセスもできないくらいの値です。

そこで、プラグインのQuery Monitorをインストールして、どの処理で速度低下、高負荷になっているのかを探してみました。

続きを読む

Criteoでパスバック広告をFluct使用、AdSenseとの併用時にサイトが遅くなる場合

ポイ探ニュースでは広告にAdSenseとCriteoを使用しています。Criteoのパスバック広告(Cookieが存在しない場合に表示する広告)としてFluctを使用していますが、何故か数ヶ月サイトが重くなるという現象が続いていました。

Criteoが原因なのかFluctが原因なのか不明でしたが、どうもCriteoとFluctの相性が良くないという結論に達しました。

Fluctのタグを直接貼った場合、Fluctのタグを外したCriteoのタグを貼った場合はストレス無くサイトが表示されます。従って、Criteoのパスバック広告にFluctを使用した時のみ重くなる場合があるということです。

行った対策としては以下の通りです。

続きを読む

nginxの/var/lib/nginx/tmp/fastcgi/でPermission deniedになる

nginx+php-fpmでサーバを動かしてみましたが、表面上はエラーも出ずに動いているように見えます。しかしログを見ると以下のような出力がありました。

2013/06/27 22:28:13 [crit] 29202#0: *194780 open() "/var/lib/nginx/tmp/fastcgi/6/46/0000000466" failed (13: Permission denied) while reading upstream, client: ***.***.***.***, server: www.poitan.net, request: "GET /***.html HTTP/1.1", upstream: 
2013/06/27 22:28:35 [crit] 29202#0: *194981 open() "/var/lib/nginx/tmp/fastcgi/7/46/0000000467" failed (13: Permission denied) while reading upstream, client: ***.***.***.***, server: www.poitan.net, request: "GET / HTTP/1.1", upstream: 
2013/06/27 22:35:03 [crit] 29201#0: *197669 open() "/var/lib/nginx/tmp/fastcgi/8/46/0000000468" failed (13: Permission denied) while reading upstream, client: ***.***.***.***, server: www.poitan.net, request: "GET /***.html HTTP/1.1", upstream:

続きを読む

サイトの確認のために、特定のサーバに接続させる方法・検証サーバに接続させる方法

サーバ構成サイトを運営していて、別サーバで作成し、本番環境に移行することは多いです。その際に、実際のドメインでどのように表示されるかを試したいことがあると思います。また、いくつかのサーバで運営していて、特定のサーバにのみ接続を確認したいという場合もあります。

例えば、www.poitan.co.jpは通常サーバBにアクセスしますが、www.poitan.co.jpをブラウザでアクセスすると、サーバAに接続してサイトの確認を行いたいという場合です。

今回は、DNSの変更を行わないで、そのサイトを指定したドメインで見る方法を書いてみたいと思います。

続きを読む

MySQLが何度も「Starting crash recovery」を実行する

ポイ探ではありませんが、他のサイトでMySQLの接続が不安定になる不具合がありました。MySQLのログを見ると下記のようになっています。

****** 11:02:44 mysqld_safe Number of processes running now: 0
****** 11:02:44 mysqld_safe mysqld restarted
****** 11:02:45 InnoDB: Initializing buffer pool, size = 8.0M
****** 11:02:45 InnoDB: Completed initialization of buffer pool
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
****** 11:02:45 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Last MySQL binlog file position 0 27378, file name ./mysql-bin.000015
****** 11:02:45 InnoDB: Started; log sequence number 0 1487447705
****** 11:02:45 [Note] Recovering after a crash using mysql-bin
****** 11:02:45 [Note] Starting crash recovery...
****** 11:02:45 [Note] Crash recovery finished.
****** 11:02:45 [Note] Event Scheduler: Loaded 0 events
****** 11:02:45 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.
Version: '5.*.**-log' socket: '/tmp/mysql.sock' port: **** Source distribution

このログが、MySQLにアクセスされるたびに出力され、バイナリファイルがどんどんインクリメントされていきます。

続きを読む

Postfixでメール受信後にPHPプログラムで処理を行う(3/3)

前回まででPostfixの設定は終了しているため、PHPの処理を書いて行きたいと思います。

11. mimeDecode.phpのインストール

メールを処理するのは大変ですので、mimeDecode.phpを使います。下記のコマンドでインストールして下さい。私の環境ではpear install Mail_MimeDecodeを行わなければmimeDecode.phpがインストールされませんでした。

# pear install Mail_Mime
# pear install Mail_MimeDecode

12. test.phpの作成

Postfixの設定でtest.phpにメールを渡すため、test.phpを作成します。

$ vi /home/script/test.php

ファイルの内容は他のサイトで詳しく書かれていましたので、そちらのリンクを参照して下さい(参考:stdinからのメール処理でメール情報を取得する)。

参考URLの補足として、Toを取得する場合は下記のようになります。

$to = $structure->headers['to'];

 

Postfixでメール受信後にPHPプログラムで処理を行う(2/3)

前回はPostfixのインストールまで行いましたので、今回はPostfixの設定まで行います。

6. ユーザを追加

バーチャルドメインで受けたメールを処理するユーザを追加します。

# groupadd -g 10000 vuser
# useradd -u 10000 -g vuser -d /var/spool/postfix/vhosts vuser
# chmod 771 /var/spool/postfix/vhosts

続きを読む

Postfixでメール受信後にPHPプログラムで処理を行う(1/3)

このブログはポイントやマイルに関する記事よりも技術的な記事のほうがアクセスが多いようで、微妙なブログになりつつあります…。

メール受信後にPHPで処理を行うプログラムを何度か作って来ましたが、毎回何度も設定を見直し、ようやく動くようになるということを繰り返してきましたので、そろそろ備忘録的にもこの設定をやれば動くという事を残しておこうと思います。

解説範囲は、メールサーバをSendmailからPostfixに変更し、メール受信後にPHPで処理し、送信元アドレス、送信先アドレスを取得するところまで行います。

続きを読む