質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • CentOS

    3017questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Apache

    2029questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • サーバ

    851questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

さくらのVPS(メモリ2GB)でこのプロセスは以上なのでしょうか?

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,601

ozaki566

score 19

現在さくらVPSのプランでメモリ2GBのプランを利用しています。
サーバー設定などはヘルプや他のサイトを参考にし、特に問題なく半年ほど利用をしてきました。

しかし最近になってサイトが表示されなくなったり、異様に重たくなる現象が発生してしまい、頭を抱えています…。

アクセス数は月間1万PVほどで然程重たくはないはずなのですが…。

WebminのプロセスでメモリーのFreeが200MBほどしかないのですがやはりメモリ不足が問題なのでしょうか?

またサイズ300MBほどのhttpdプロセスが多数あるのですがこれは問題ないのでしょうか?

イメージ説明

ど初心者で的はずれな質問でしたら申し訳ございませんm(_ _;)m
アドバイス頂けると嬉しいです。

■追記(1/4 20:30)
お二方からの大変詳しいアドバイスありがとう御座います(>_<;)
画像をコメント欄に掲載できなかったためこちらに追記を致します。

数値は下記のような状況です。

イメージ説明

イメージ説明

MySQL version 5.1.73
Apache バージョン 2.2.15

を利用しています。

1年ほど運用を運用をして参りましたが年越しをしてから途端に重たくなり始めてしまい、現在お二方から頂いた参考サイトを見ながら設定を見なおしています。

ここで上位プランに引き上げることが一番てっとり早いのかも知れませんが、アドバイス頂いた通り次回同様の問題が発生したときにまた対応ができなくなるため、今回しっかり原因を突き止めたいと思います。

どんなアドバイスでも結構ですので確認してみると良い場所など他にあれば何卒ご教授のほどお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+3

OSの種類やApacheのバージョンも分からないので、具体的なコメントがしにくいですが…

もしLinux系のOSを使用しているならば、メモリーの空き領域を積極的にIOバッファとして利用するので、空き領域が少ないこと自体は問題ありません。
しかし、異様に重たくなる現象が発生しているのであれば、メモリー不足によるスワップが発生しているのかもしれません。
それで、まずはコンソールから下記コマンドを実行してみて、メモリースワップが発生していないかを確認して見ると良いです。

vmstat 1 | awk '{print strftime("%Y-%m-%d %T ") $0; system("");}'

ボトルネックの特定はとても奥深い問題で一筋縄では行きませんが、下記ページはとても参考になると思いますので、ご参考までにリンクを貼り付けて置きます。

  OS コマンドによるボトルネック調査

さて、アクセス数がそれ程多くなく、一方、Apacheのプロセス数が多い事がメモリー容量の不足につながっているのであれば、多重度を制限することで状況が改善するかもしれません。
まずは、現在の設定がどうなっているかを確認し、以下のページを参考に多重度を少し落としてみてはいかがでしょうか?

Apacheの多重度

以上、いくらかでもご参考になれば幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/03 23:41

    バージョンは分かりませんが、タグにCentOSが付いているので、
    Linuxで当たりと思います。

    キャンセル

  • 2016/01/04 09:48

    早速のご回答ありがとう御座いました。
    またサーバー情報の記入漏れ、申し訳御座いません。

    pi-chanさんから頂いたコマンドを重たいと感じる時間に実行したところ、


    2016-01-04 09:40:31 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
    2016-01-04 09:40:32 r b swpd free buff cache si so bi bo in cs us sy id wa st
    2016-01-04 09:40:33 2 0 353288 75564 468 21604 0 0 224 0 351 225 5 0 93 1 0
    2016-01-04 09:40:34 0 1 353196 75572 468 21572 132 0 156 0 850 276 19 1 77 3 0
    2016-01-04 09:40:35 0 0 352812 75216 468 21640 348 0 424 0 942 277 18 1 77 3 0
    2016-01-04 09:40:36 1 0 353536 75712 484 21744 36 740 76 792 858 356 17 1 76 6 0
    2016-01-04 09:40:37 1 0 353536 75496 636 21880 0 0 280 92 735 255 7 1 89 3 0
    2016-01-04 09:40:38 0 0 353532 75496 636 21900 32 0 48 0 164 52 0 0 99 1 0
    2016-01-04 09:40:39 0 0 353508 75420 644 21908 152 0 160 0 221 96 2 0 97 1 0
    2016-01-04 09:40:40 0 0 353508 75420 644 21912 0 0 4 0 99 45 0 0 100 0 0
    2016-01-04 09:40:41 3 0 353500 75444 648 21920 0 0 12 0 1052 147 29 1 69 0 0
    2016-01-04 09:40:42 0 1 351128 72236 656 21916 3136 0 3136 52 1070 728 23 1 70 6 0
    2016-01-04 09:40:43 3 2 348476 71220 656 21796 11332 7656 11332 7656 2472 1486 45 5 32 17 1
    2016-01-04 09:40:44 0 2 340264 63916 408 21468 19392 10872 19400 10872 2321 2618 31 4 46 17 1
    2016-01-04 09:40:45 3 3 339412 61972 452 21264 16624 15540 16680 15592 2973 1822 49 6 26 18 0
    2016-01-04 09:40:46 1 2 337388 57004 452 21412 18284 13856 18284 13856 2587 2508 37 5 29 28 1
    2016-01-04 09:40:47 0 3 341152 56280 452 21352 21556 19156 21556 19156 1662 2331 6 3 61 29 0
    2016-01-04 09:40:48 3 0 361560 70156 512 21136 13656 28880 14340 28996 5238 1849 55 7 29 7 2
    2016-01-04 09:40:49 1 1 363908 71644 516 24268 8268 8400 11436 8400 1793 1744 28 3 46 23 0
    2016-01-04 09:40:50 0 1 363988 72268 332 24560 60 120 608 120 611 269 12 1 55 31 0
    2016-01-04 09:40:51 0 2 363084 70252 332 24600 2744 0 2816 0 1409 873 29 2 40 29 0

    という結果でした。


    OS:CentOS Linux 6.7
    CPU:Linux 2.6.32-573.7.1.el6.x86_64 on x86_64
    Running processes:166


    頂いたサイトを参考に「MaxRequestsPerChild」がさくらではデフォルト4000となっていたため、こちらを「500」に下げたところ、現状サイトが表示されないほど重たくなることはなくなりました。(開くまで相変わらず3-5秒掛かってしまいますが…)

    引き続き原因を探索してみます。

    キャンセル

  • 2016/01/04 13:35

    確認致しましたが、メモリー不足は否めませんね。
    通常「si/so」の項目はゼロであるべきですが、頻繁にゼロ以外の値になっているということは、メモリー不足のためにスワップ(=HDDアクセス)が発生しているということで、そのためにレスポンスが著しく低下していると思います。

    メモリーを増やせば「取り敢えず改善」するとは思いますが、出費を伴いますし、プランの変更は比較的簡単(=いつでも出来る)ので、サーバーのチューニングをもう少しだけ頑張ってみてはいかがでしょうか。

    PVの値から推察する限りでは、「同時アクセス数」ってそんなに大きくは無いですよね?

    もしそうなら、下記ページを参考に「MaxRequestsPerChild」と「KeepAlive」関連の設定を見直して、Apacheが早くメモリーを解放出来るようにしてみることをおすすめ致します。

    「Apacheパフォーマンス・チューニングの実践 」
    > http://www.atmarkit.co.jp/ait/spv/0207/23/news002_2.html

    そして、アクセスが多そうな時間帯にご自身でもアクセスしてみて、体感のレスポンスを確認してみると良いと思います。

    キャンセル

+3

異様に重たくなる現象が出た際、
メモリ不足でスラッシングが発生している可能性はありそうですね。

httpdのサイズと数も気になりますが、
mysqldが1.6Gと、物理メモリの8割なのも気になります。

とは言え、実際に何が原因で現象が発生しているかは、
現象発生時の情報がないと分かりません。

異様に重たくなるなどの現象が出た際、CPU、ネットワークトラフィック、
ディスクI/Oの状況は分かりますか?
さくらvpsにはコントロールパネルが有るようなので、
その情報で良いので提示できますか?

メモリの使用量もあると良いのですが、
最低限、コントロールパネルの情報は必要と思います。

それから、現象発生時に/var/log/messagesやhttpd、mysqldのログなどに、
何かエラーログは出ていませんか?


(2016/1/4 14:42追記)
大雑把に、接続毎に使用するメモリと、接続数によらず使用するメモリがあるので、

  1. 入口で接続数を制限する
  2. 接続毎のメモリ量を制限する
  3. 接続数によらないメモリの量を制限する

ことが必要と思います。  

接続数×接続毎のメモリ量+接続数によらないメモリの量


が総メモリ量の八割程度に収まるようにしておくのが良いかと思います。

1.は、p-chanさんの回答にある、Apacheの多重度の制限で実現すれば良いと思います。  
MaxClients、KeepAlive、MaxRequestsPerChildの設定が重要と思います。

2.と3.については、ApacheとMySQLで分けて書きます。

 Apache

2.については、制限するというより、まずはどのくらい使用しているか見た方が良いと思います。  
1プロセスでは300MB程度のようなので、これをいくつの接続で使用したかを設定値を見て  
判断することになると思います。  
接続数はpreforkなら1ですし、workerならThreadsPerChildに設定した値と思います。  
3.については、おそらくApacheで接続数によらずに使用するメモリは少ないので、  
考慮に入れなくて良いと思います。  

 MySQL

2.3.についてのMySQLの設定では、このページやこのページにもある、以下のパラメータの設定を見直すことになると思います。

  • リクエスト毎のメモリ
sort_buffer_size
join_buffer_size
read_buffer_size
read_rnd_buffer_size
net_buffer_length
  • リクエスト数によらないメモリ
key_buffer_size
query_cache_size
innodb_buffer_pool_size
innodb_log_buffer_size
innodb_additional_mem_pool_size


設定値が、サーバにMySQLしかない場合に合わせてあり、  
Apacheが使う分のメモリが計算に入っていない可能性があるのではと思っています。
設定値を見ていないので、ただの憶測ですが。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/04 09:53

    ご回答ありがとう御座いました。
    サイトが重たくなるとき「FTP、サイト表示、SSH接続」はいずれもできない状態で、「さくらコントロールパネル」からログインし確認をしたところトラフィック、DISK I/O、CPUともに通常の10倍近く跳ね上がっていました。

    /var/log/messageを見てみると、
    Out of memory: Kill processでhttpsが終了された というエラーが頻発していました。

    メモリの多い上位プランに変更すれば根本から解決することができるのでしょうか?

    キャンセル

  • 2016/01/04 14:40

    通常の10倍というものの具体的な値が知りたいところですが、
    pi-chanさんへのコメントの内容からすると、スワップが大量に発生しているようですね。

    /var/log/messagesの結果から、OOM Killerも動いているようなので、
    メモリ不足で重くなっているのは間違い無い様です。
    また、トラフィックも10倍になっているのであれば、その時刻にアクセスが集中しているのかも知れません。

    > メモリの多い上位プランに変更すれば根本から解決することができるのでしょうか?
    については、ひとまず現象は改善するかもしれませんが、
    根本的には、必要なメモリ量の見積もりが必要と思います。

    メモリ量の見積もりについては、回答に追記します。

    ApacheやMySQLのバージョンや、現在の設定値も教えていただければ、
    こちらでも確認します。
    特に回答に書いたような設定について
    教えていただけると回答しやすいです。

    キャンセル

  • 2016/01/04 21:06

    トラフィックのグラフは、ほとんど下に貼り付いていて
    アクセス数が増えているのかどうか分かりませんね。

    y軸方向に拡大するか、PVについて似たようなグラフを出すか、
    できるでしょうか?
    Apacheのアクセスログを集計しても、同じようなグラフは出せると思います。

    キャンセル

check解決した方法

+1

お二方にとても参考になるアドバイスを頂くことができ大変感謝しています。
アドバイス頂いたサイトをもとに設定を行い、現在サーバーが安定した状態になりました。
(一時的な安定でないことを願うばかりです…)

行った施策:

$ vi /etc/php.ini
修正前
memory_limit = 128M を 64MBに変更

<IfModule prefork.c>
StartServers       5
MinSpareServers    5
MaxSpareServers   10
ServerLimit      64
MaxClients       64
MaxRequestsPerChild  4000
</IfModule>

Timeout 30 
KeepAlive On
KeepAliveTimeout 3

現在この2つの設定を上記の数値にしたところ、安定しています。

グラフのズームしたデータをアップロードしようと思ったのですが、さくらコントロールパネルではこの縮尺しかないようで、拡大・縮小できませんでした…。

しばらくこの状態で様子をみてみます。
もしまた同様のトラブルが発生した場合、質問をさせていただくかもしれませんがその際はまたアドバイス頂けると嬉しいです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/16 22:28

    [1/16 更新]
    この設定で約2週間ほどサーバーは安定していましたが先ほどまたページが表示されない病が再発してしまいました…(;_;)
    もう一度見なおしてみます…。

    キャンセル

  • 2016/01/16 23:12

    そうですね。
    単純計算で、memory_limitを半分にして、1プロセス当たりのメモリ使用量が
    半分になっても170MB程度で、それがMaxClientの64個有るとすると
    それだけで10GBを超えるので、負荷が集中すればエラーになることは考えられます。
    また、2GBに収めるには、MySQLのメモリも減らさなければならない気がします。

    今回の再発が、実際にアクセスの集中によるものかは、調べてみないと分かりませんが。

    キャンセル

同じタグがついた質問を見る

  • CentOS

    3017questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Apache

    2029questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • サーバ

    851questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。