弊社ではサーバー高速化ソリューションをご提供していますが、チューニング前に診断としてリソース具合やボトルネックの有無を事前調査させて頂いています。
高速化の為のミドルウェアのチューニングの他に、実はプログラムのボトルネック対応も大きい部分だったりします。クライアント様システム固有の部分も多く、詳細は公開できないのですが、よくあるパターンをご紹介します。
サーバーが遅い原因はエラーが起こっている
これが一番多い原因がかもしれません。
実際にサーバー内部で動かしているスクリプトやモジュールにて設計的にミスをしており、構築・設計時には問題がなかったのに環境をアップデートした事によるエラーが出ることも多いです。実際にはエラーが出ているのに、スクリプトの設定で非表示にしており、毎分数十MB単位でエラーを吐いていることもあります。これではIOが勿体ないですね。
無駄なエラー処理で負荷がかかりますし、遅くなります。しいては不安定さに繋がります。エラー通知でサーバー容量が一杯になり処理できなくなることもあります。プログラムを動かすだけでなく、ぜひ、サーバーの悲鳴に耳を傾けた開発を。
特にPHPなどのスクリプトは変数の扱いが柔軟な故にアクセス毎に通知エラー・・・×1000×n。関数の引数記述ミス、初期化処理の忘れなどありがちで、大量にあると性能低下、あらゆる不具合に。また確認の際にログが多すぎると全て確認するのに障害時の切り分けが困難になります。だからと言って、ログレベルを上げて無視するのは良くありません。Noticeレベルに起因する箇所が動作不良の原因である事があります。ミドルウェアは多少エラーがあっても起動出来る事が多いですが、動作が不安定になりがちです。
ぜひ、まずはこちらを行いましょう。
重い処理がある
重要ではない機能で重いものがある場合、お客様と相談して切り捨ててしまうという手があります。重要ではないのだから。
特にサードパーティ製のプラグインなどは気をつけてみましょう。
例としてはWordPressで”使ってないけど入れている”というプラグインが原因というのも時々見かけます。
メモリリークが起こっている メモリがいつまでも開放されない
これは該当箇所を探すのがとても大変です。砂漠で花を探す。エラーであればログがありますがループ処理はエラーでないだけに、探すのが大変です。もちろん開発環境で行ってもらえば直ぐ見つかりますが、オープンソース系のプラグインなどを入れて競合する場合などはサーバー上で探すのは困難です。
対策としては、メモリを開放するようにコードを修正するのが一番です。古いプログラムでありがちで、バージョンの高いプログラムはメモリの扱いが改善されているので、バージョンの高いもので動くように対応するなど。放置すると不安定さに繋がります。
サーバーに数人が同時にアクセスすると落ちる
大量の処理遅延。SSHも応答しなくなることもあります。
プログラム設計上のエラーの可能性が高いですが、ループしているなど理由はさまざま。
while(1){echo “絶望がありあまる”;}
ループは既定の設定により一定時間や処理で一応終わるものの、無駄なループがあるケース。階層絡みのループで取得して表示処理する箇所など追っていくしかありません。
クエリ実行が長い
サーバーが遅い理由でよく見かけるのが、データベースへの命令が10秒以上処理にかかっていたりすることも見かけます。
こちらはクエリの改善やテーブルやカラムの設定を変更する対応が必要です。
データベースが落ちる
データベースが遅い事に続いてデッドロックの可能性があることがあります。トランザクションがあってもロールバック処理がなかったりするなど。処理の追加、サーバー側でタイムアウト設定など対応が多いです。
関連
既にクラックされている
WebShellやウィルスなど不正なプログラムが設置されてしまっている、rootやadminを第三者に取られて外部に攻撃を行っているのも見かけます。お客様の提供するアカウントではサーバーログインが不能!?よくあるのがIP接続制限によるもので音信不通の元開発者のネットワークからしか入れないとか。契約前の調査で、既に予戦が始まっている。
そんなわけでSSHが不能な場合は裏口から解決する事が多いです。鍵認証していてもこれだと意味あるのかな?とちょっと疑問ですが、仕事では助かっています。CMSの場合は人気のCMSほど攻撃されやすいので、攻撃を感知する仕組み、管理画面のURL変更・IP制限など攻撃されにくい仕組みを用意するのが有効。
お客様に聞くレンタルサーバ屋さんの対応
1つのサーバーにたくさんのユーザを収容するレンタルサーバ屋さんは、サーバーに負荷をかける問題のあるプログラムをユーザが動かしている場合、プログラム改善の勧告を行い、ユーザ側で対応が出来ない場合は1日~3日で契約解除になる場合が多いようです。安価なサービスなのでしょうがないのかなと・・・。中には1ユーザの為にフレキシブルに奔走してくれる驚くべきサーバ業者さんの存在もあり。凄い。
まとめ
問題のあるプログラムもひとまずキャッシュによりそこそこ早く動いてしまうので、ちょっとしたものならサービス内で対応していますが、中規模なシステム全体に及ぶ改修となるとクライアント様の予算がおりにくく、不安定になるのはわかっていても対応が難しい場合もあったりなかったり。暫定処置としてプロセスが落ちても即座に自動再起動する仕組みやCronで適度に開放対応するなど予算などの条件の中でベストを尽くしています。ぜひお気軽にご相談を。