4月15日の夕方頃から、WordPressが謎の動作不良になってしまい 6時間近く悪戦苦闘してました。
ひたすら、検索、検索、検索 しまくって、結局当てはまる解決策にたどり着けず 最後の手段でとっておいた策で解決できた。そんな備忘録。
現在、このブログは「さくらVPS」+「WordPress」の組み合わせで動いてます。
症状
トップページは何の問題もなく表示されるのですが、記事がまったく表示されません。
別段エラー表示が出るわけではなく、背景画像の状態でその他何も表示されない。
ヘッダーすら表示されない状態。ウェブブラウザーがずーっと読み込みを続けるんですよね。
正確には、「投稿記事」についてはカテゴリー分類で「未分類」に属している記事のみ表示されて、他のカテゴリーはどの記事も表示されない。
「固定記事」はすべて表示されない。
カテゴリーやタグを選択して表示される「記事一覧」も表示されない。カテゴリー「未分類」の記事一覧だけ表示される。
試した対策と結果
VPSの再起動
ひとまず、さくらVPSのサーバー状態を見てみると・・・
CPU と DISK I/O が今までに見たこともないほどの数値を出してます。
サーバーステータスには見慣れないアイコンと見たこと無い警告文まで 😯
もう、個人的には一大事!
大慌てで、「強制再起動」しましたよ。
なにか得体の知れない障害が起きているせいで、ストレージアクセスの制限。
そのせいで、記事の表示が遅いだけ・・・と、この時点では簡単に考えてました。
しかし・・・再起動程度では何も解決せず。
「IOPS制限中」だけは解除されたっぽい。
httpdの再起動
VPS再起動後、ブログを見ても表示できない。
おかしいと思いhttpdの動作状況を見ると、「停止中」
ならば「起動」すれば良い。しかし、起動できない(゚Д゚≡゚д゚)エッ!?
エラー情報を元にたどり着いた解決方法はコレ。
「他プロセスがポートを占有してhttpdを再起動できない」
現象
httpdを再起動しようとすると、Address already in useと言われ再起動できない。$ sudo /etc/init.d/httpd restart
httpd を停止 [ OK ]
httpd を起動中: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
[失敗]環境
$ httpd -v
Server version: Apache/2.2.29 (Unix)
Server built: Mar 12 2015 03:50:17原因
httpdが異常終了する等して古いhttpdプロセスが残っていることが原因。対策
lsofコマンドで古いプロセスを表示し、killすればよい。$ sudo lsof -i | grep http
httpd 27512 apache 4u IPv6 90360 0t0 TCP *:http (LISTEN)
httpd 27520 apache 4u IPv6 90360 0t0 TCP *:http (LISTEN)27512, 27520のidをもつプロセスが残っていることが分かる。
$ sudo kill -9 27512
$ sudo kill -9 27520これで起動するようになる。
$ sudo /etc/init.d/httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]引用元:http://qiita.com/ysk24ok/items/ffe8d5d1479aaf5afeaa#%E7%8F%BE%E8%B1%A1
なるほど、httpdのエラーでおかしかっただけなのか。
上記操作で無事httpdは起動。
これで直るか?とブログを確認するも・・・記事表示できず。「解決せず」
エラー情報から原因究明を試みる
色々調べた結果、WordPressは、デフォルトでエラーメッセージを表示しないよう設定されているらしい。まずは、設定を変更し、エラーメッセージを表示させてみます。
WordPressのインストールディレクトリにある「wp-config.php」というファイルの
define(‘WP_DEBUG’, false) の箇所を以下に変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/** * 開発者へ: WordPress デバッグモード * * この値を true にすると、開発中に注意 (notice) を表示します。 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。 * * その他のデバッグに利用できる定数については Codex をご覧ください。 * * @link http://wpdocs.osdn.jp/WordPress%E3%81%A7%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0 */ define('WP_DEBUG', false); (false を true に変更) /* サブドメインマルチブログ用に追加 */ define('WP_ALLOW_MULTISITE', true); |
これで、WordPressのエラーがブラウザ上に表示されるようになる。
その確認結果がこちら
どうやら、「taxonomy.php」でエラーが発生している模様。
このファイル、調べてみると カテゴリーに関する動作をするモジュールらしい。なるほど!だから、特定カテゴリーに関する記事表示ができないのか。
いや、しかしこのファイルを触ったことはないし 動作不良が起きた前にプラグインの追加した覚えもないし・・・とりあえず検索して出てきた対策をやってみる。
- パーマリンクの設定変えずに保存してみる ⇒ 直らず
- パーマリンクを別の物に変えて保存、元に戻す ⇒ 直らず
- カテゴリーを1つ追加後、削除 ⇒ 直らず
- テーマを変更してみる ⇒ 直らず
- プラグインを全停止・・・は保留
- .htaccessに関するチェック・・・可能性低いのでパス
- その他色々 ⇒ 直らず
結局なにをやってみ改善しない。
幸いなことに、ブログの記事自体は無事なようなので 一旦バックアップを取って 面倒なプラグイン関連の検証をする決心をつける。
SQLをバックアップする方法は面倒そうなので、とても今する気力はない。よって、エクスポートで済ます。
これで、一安心?
プラグインをすべて停止する検証へ・・・の前に プラグイン更新が10数個あるようなのでこの際全部最新へ更新。(更新による不具合が嫌いなので、アップデートは他の人の不具合情報などが出揃ってからするタイプ。そして、溜りにたまって更新機会を逃すタイプ)
念のため、ブログの状況を確認。
!
!!!!!
!!!!!!!!!!
直ったーーーーー!!!!!!!!
どのプラグインが原因か判りませんが、プラグインをすべて最新版にしたら直っちゃいました。
まとめ
おかしくなる前にブログのカスタマイズをした訳ではないので、構文ミスなどに起因する不具合ではないし・・・
不具合前にプラグイン追加などをしていないので、相性問題ってわけでもないし・・・
どういうこと? プラグインに更新があると不具合を起こして更新を促す みたいな変なプラグインが存在してんのかねぇ?
悪戦苦闘の6時間が結局「もやもや」のままに終わった。
今後はこまめに更新するように心がけようと思う。思う。
[…] ”気になる忘備録”さんのサイトに行き着いた⇒http://blog.blog-studio.com/archives/2080 […]