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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1445閲覧

apache2.4とphp7.2でhttpdプロセスのメモリ使用量が大きい原因について

neneo7

総合スコア15

Apache

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2018/10/20 12:38

編集2018/10/22 03:44

centos7 apache2.4とphp7.2の組み合わせでwebサーバを立ち上げています。

  • apache 2.4.6
  • php 7.2.7

上記の組み合わせで、apacheを起動直後に、topコマンドでhttpdのプロセスを見た時に、いきなりhttpdの1プロセスが
250MB
くらい食っています。

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND XXXXX apache 20 0 799.7m 250.2m 1.8m S 0.0 12.5 0:00.00 httpd

ちょっと大きすぎる気がするのですが、原因というか、この辺りをチェックすべしというのがあればアドバイスいただけないでしょうか?

以前、apache2.2系+php5.6系を使っていた時は、最初は
50MBくらいだったと思うのです。

この値がphpが利用していくうちに、コードによってはプロセスが再利用されているうちはメモリが増えていくのは仕方ないと思っているのですが、
上記250MBは、apacheを起動直後の値なのです。
※preforkで5つ立ち上げているのですが、その5つともまず250MBスタートという感じなのです。

/etc/httpd/conf.modules.d
の中で、apache2.2系の時にロードしていなかった、davなどの必要のないモジュールはロードしないようにもしています。

この情報だけでは足りないかもしれませんが、なにかヒントでもいただければ助かります。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

pmap -x <PID> でメモリを多く使用しているモジュールを探してみては?

投稿2018/10/21 14:44

TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neneo7

2018/10/22 00:34

アドバイスありがとうございます! いただいたコマンドで、apache起動直後に生成されるhttpdのプロセスの一つをチェックしたところ、こまごまと出てきたのですが、一番大きなのがanonと表示されていて、こいつがなんなのか、なぜこんなにも大きいのかがわかりませんでした。 ここから、さらに調べていく方法など、ありますでしょうか? Address Kbytes RSS Dirty Mode Mapping XXXXXXXXXXXXXXXX 484 280 0 r-x-- httpd XXXXXXXXXXXXXXXX 251352 251252 251252 rw--- [ anon ]
TaichiYanagiya

2018/10/22 15:38

pmap のアドレスを /proc/PID/maps, /proc/PID/smaps で探すと heap とか stack とかまではわかると思いますが、それ以上は知りません。 php などのモジュールを外してもメモリを多く使用しているのであれば、httpd 本体なのでしょう。 httpd は独自にコンパイルしたものではなく、CentOS 7 で提供されているものですよね? 手元の環境では再現しないのですが、設定に起因するのでしょうか。
neneo7

2018/10/24 00:04

ありがとうございます!いただいたアドバイスを参考にして、チェックした結果、apacheインストール直後の設定ファイルでは、起動時のプロセスのメモリは25MB程度でした。ですので、私が加えたなんらかの設定により、メモリを食っているようです。そこで、 1.モジュールを順次ロードしないようにしていき、メモリを食ってるモジュールがないか調べる 2.apacheそのもの(コア)が、何かしらの加えた設定によって、メモリを食うようになっていないか、インストール直後の設定ファイルと比較していく というのをやっていった結果、私自身が後で加えた、VirtualHostの設定により、使用メモリが増大していることがわかりました。 以下の例のような、SNIの記述を加えると、約1.5MBほど増大します。 <VirtualHost *:443> ServerName 0001.XXXXXX.jp DocumentRoot /var/www/html/0001/ SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4:!DH SSLCertificateFile /XXXX.crt SSLCertificateKeyFile /XXXX.key SSLCACertificateFile /XXXXinter.crt </VirtualHost> で、このバーチャルホストを増やしていくと、その分HTTPプロセス起動時のメモリが増大していきます。 単純に10個増やすと、httpdのプロセスの起動時のメモリが、150MBほどプラスされるという感じです。 これは、こういうものなのでしょうか?それとも、私のこの設定方法がなにか根本的に間違っているのでしょうか?
TaichiYanagiya

2018/10/25 13:15

> 単純に10個増やすと、httpdのプロセスの起動時のメモリが、150MBほどプラスされるという感じです。 手元の環境では、せいぜい 10MB でした。 SSLCertificateFile, SSLCACertificateFile など、証明書ファイルのサイズが大きいとか?
neneo7

2018/10/26 05:01

情報ありがとうございます!とても助かります。 なるほど、証明書そのものですね。 現在、このテストのために、自己署名証明書(いわゆるオレオレ証明書)を作って設定してるのですが、その作り方がおかしいのかもしれません。さらに調べていきます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問