- ベストアンサー
サーバーの性能を上げるために自宅でサーバー運用をする方法
- サーバーの性能を上げるために自宅でサーバー運用をする方法を紹介します。Web上でFlashとPHPを利用したサービスを提供する際、訪問者の増加によりページの表示が遅くなることがあります。そこで、今使っているサーバーを拡張することを検討しています。お金に余裕がない場合、安くサーバーの性能を上げるにはCPU、メモリ、HDDなどを拡張する方法があります。また、ハード面だけでなく、ソフト面での拡張方法も考える必要があります。
- サーバーの性能を上げるためには、次のような方法があります。まず、CPUの拡張により処理能力を向上させることができます。また、メモリの拡張により、同時アクセスや大量のデータ処理に対応できるようになります。さらに、HDDの拡張により、データの読み書き速度を向上させることも可能です。ソフト面では、PHPやデータベースのチューニング方法を活用することで、サーバーの処理速度を向上させることができます。
- サーバーの性能を上げるためには、ハード面とソフト面の両方を考慮する必要があります。お金に余裕がある場合は、性能の良いPCを導入することができますが、余裕がない場合は安価な方法を選ぶ必要があります。具体的には、CPUの拡張、メモリの拡張、HDDの拡張などを検討することが重要です。また、PHPやデータベースのチューニング方法なども有効な手段です。サーバーの性能向上には、環境やデータベースの組み方によっても差がありますので、指針になるような基準は存在しません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
先の返答でDB(PostgreSQL)について触れるのを忘れていましたので追記します。 DBに対してどのようなチューニングを施しているのか、また、どのようなテーブル設計をしているのか、さらに、処理する最大データ量がまったく、表記されていないので、なんとも言えませんが、 経験上、DBまわりでボトルネックとなる可能性が最も高いのは、 Select文の作りの悪さ((1))と、テーブルの正規化(物理設計)((2))です。 個人のサーバでDBMSの設定が悪くて遅くなるのは珍しいと思います。 理由:個人サーバでそこまでDBに負荷をかけれるほどアクセスがあるとは思えない。 で、(1)の件ですが、不必要なテーブルフルスキャンが発生していないか?正しいIndexは使用されているか?実行計画を見て確認してください。次に、PHPの中でループ(for while等)を使用して、SQLを数100回、数1000回実行していないか?実行しているなら工夫して数を減らすべきです。 (SQLのチューニングだけで2時間かかっていたバッチ処理を2分、10時間かかっていたバッチを8分にまで処理時間を縮めたこともあります。) (2)の件ですが、Select文でテーブル結合するときに、無駄に取得行数が増えていないか?ということですが、まぁ、テーブルの正規化ができているかということになります。ただし、頻繁にアクセスするテーブルはあえて正規化をしない(テーブル結合させない)ことで、参照レスポンスを上げることも検討すべきです。 最後に、「余談」についてコメントします。 ちょっと前に、あなたのPCスペックとほぼ同等(OSだけWin2000Server[apache使うならLinuxのほうが速い])で、 ソフトウエアはApache+PHP+MySQLでシステムを構築したことがありますが、100アクセス/sは捌けていました。DBの物理設計が本当に悪かったため、これ以上性能を上げることはできませんでしたが、 OSをLinuxとし、テーブル設計を見直していたら、5000アクセス/sは最低でも捌けたと思います。 PS. 私もLinux+PHP+PostgreSQL+Apacheの個人サーバがあります。 ハードウエアは、MMXPentium 266Mhz + メモリ96M + HDD(80G,ただし、USBが1.0のため遅い)ですが、このマシンをWebだけで性能を引き出そうとすると相当アクセスされないと無理だなぁと感じています。
その他の回答 (4)
参考文献の件 お勧めHPを即答出来ないので、 ネットで調べるならば、下記のキーワード(単語の意味がわからなければそれもネットで)で調べてみてください。 「実行計画」、「explain plan」、「オプティマイザ」、「index」 「SQL パフォーマンス」、「SQL チューニング」 理解するポイントは、「実行するSQLの実行計画(explain plan)を見て、 使われるべきインデックスを使用しているか(注:インデックスを使用すると遅くなるケースもある!)」を判断出来るようになることです。 テーブル設計やSQLコーディングがまずかったりすると、 不必要に「FULL SCAN」、「CROSS JOIN」していたりします。 理由:オプティマイザがテーブル設計(具体的にはcreate table,create indexしたテーブル構造)を見て、どのindexが最適化判断できないため。 書籍等ですが、私はOracleのマニュアルをみて知識を吸収したので、 書店で購入できる本を即答出来ません、すみません。 書籍を探すにしても、「実行計画」を詳しく説明している本がいいのではないでしょうか?←結局、最も詳しいのはDBMSのマニュアルなんですけどね。 最後に、PostgreSQLで、SQLの実行計画を表示させるには、 psqlにログインして、コマンドラインから、 explain チェックしたいSQL文; です。 例: farm=# explain select * from testtbl2,testtbl3; Nested Loop (cost=19.90..34969.30 rows=1746000 width=64) -> Seq Scan on testtbl3 (cost=0.00..29.40 rows=1940 width=8) -> Materialize (cost=19.90..28.90 rows=900 width=56) -> Seq Scan on testtbl2 (cost=0.00..19.00 rows=900 width=56)
お礼
再度ご返答いただきありがとうございました。 教えて頂いた事を参考にして、地道に調査したいと思います。 本当にありがとうございました!
まず、現在どれくらいのアクセス(Kbyte/sec)があるのか、アクセスが集中しているページの転送容量(byte/page)、アクセスが集中しているときの同時接続数(session/sec)が、記載されていないので、原因を即答できませんが、 PCのスペックは十分あると思われ(ただし、同時接続数が著しく多い場合はメモリ不足も考えられる)、 かつ、訪問者が多くなったら遅くなったとのことですので、 Apacheの最大コネクション数を疑ってみてはいかがですか? Apacheのバージョン、プロセスの種類も明記されていないので 、確認すべき変数が異なりますが、 preforkなら、MaxClients workerなら、ThreadsPerChildも。 また、Apacheの処理能力を把握するには、 mod_statusを入れるとよいでしょう。 プロセスの状態(待機中か実行中か)や、処理に費やした時間が、 リアルタイムで把握できます。 あと、ハードのスペックをリアルタイムで知りたいなら、 topコマンドを使うのが手軽でしょう。 cpuの負荷、メモリの使用状況、スワップ状況が把握できます。 最後に、ホームページのアクセス状況を統計的に把握したいのであれば、 webalizer等を導入するといいですよ。
- precog
- ベストアンサー率22% (966/4314)
性能チューニングは測定からです。 CPU使用率、Disk使用率、ネットワーク使用率、メモリー使用率を測定し、どこがネックになっているのか調べてください。 どこも該当しない場合は、リソースネック(スレッド制限に引っかかっているか処理がシリアライズされている)可能性があります。
お礼
お返事ありがとうございます。 確かに測定からですよね。ただ、調査の仕方が分からないので今から調べて みますが、お勧めのツールややり方があればご教授下さい。 (サーバー運用は初心者なのでどう調べていこうか迷っています) アドバイスありがとうございました。
- cmc32000
- ベストアンサー率41% (103/251)
Webサーバーとして公開しているのなら、回線の問題でしょう。Webサーバーとして使うPCの性能は大して問題になりません。回線の速度が遅いのだと思いますが?
お礼
回線ですが、現在光プレミアムを使用しています。 実測で23Mbps程度くらいです。ただ、回線を変えるとなると費用の面でも 大変な出費になります。 回線について少し調べてみたいと思います。 といっても、調べ方が分からないので今から検索してみますが 笑 アドバイスありがとうございました。
お礼
詳細な説明ありがとうございました。大変参考になります。 ハードの性能を上げる前に、ソフト面での最適化を行ってからもう一度調査 を行ってみたいと思います。 1点だけよろしいでしょうか? それほどSQLに詳しくないので、回答で教えて頂いた事をもっと詳しく勉強 したのですが、良いサイトや書籍などはありますでしょうか。 追記で申し訳ありませんが、知っていましたら是非教えてください。