EC-CUBEというEC系のCMSを利用してECサイトを運営している者です。  
タイトルの通り、Webサーバがダウンする事象があり、原因究明のためにログを確認している中で、サーバサイドには知見が少なく行き詰ってしまったため質問させていただきました。

## 障害内容

Webサイトが閲覧できなくなる事象が発生しました。  
サーバ監視ツールにて確認したところ、メモリやCPUの使用率は事象発生中も記録できていたので、  
サーバーそのもののダウンではなく、Webサーバーが応答しなくなってしまっている状態でした。  
Apacheのプロセス数を監視していたため合わせて確認したところ、Apacheのプロセス数が上限に張り付いてしまっていました。  
本番運用中の環境であった為、Apacheの再起動を実施したところ復旧しました。

## 環境

環境 | バージョン  
---|---  
Server | Ubuntu20.04  
Web Server | Apache 2.4.41  
Database | PostgreSQL 10.15  
PHP | PHP 7.4.3  
  
**mpm_prefork.conf**

```

    <IfModule mpm_prefork_module>
            StartServers              50
            MinSpareServers           40
            MaxSpareServers           80
            ServerLimit               450
            MaxRequestWorkers         450
            MaxConnectionsPerChild    1000
    </IfModule>
    
```

## 質問

事象発生時に、以下のApacheの`eroor.log`ログに出力されていました。  
自分なりに調べてはみたものの、有力な情報がなく原因究明が行き詰ってしまっています。

```

    Thu Jan  5 21:50:53 2023 (1737260): Error Cannot kill process 1728648: Success!
    Thu Jan  5 21:50:53 2023 (1737240): Error Cannot kill process 1730876: Success!
    Thu Jan  5 21:50:54 2023 (1737399): Error Cannot kill process 1726872: Success!
    Thu Jan  5 21:50:54 2023 (1737335): Error Cannot kill process 1728071: Success!
    Thu Jan  5 21:50:55 2023 (1737339): Error Cannot kill process 1734122: Success!
    Thu Jan  5 21:50:56 2023 (1737334): Error Cannot kill process 1730320: Success!
    Thu Jan  5 21:50:57 2023 (1737338): Error Cannot kill process 1733987: Success!
    Thu Jan  5 21:50:58 2023 (1737331): Error Cannot kill process 1735553: Success!
    Thu Jan  5 21:50:59 2023 (1737311): Error Cannot kill process 1735205: Success!
    Thu Jan  5 21:51:00 2023 (1737398): Error Cannot kill process 1734620: Success!
    Thu Jan  5 21:51:01 2023 (1737239): Error Cannot kill process 1729939: Success!
    Thu Jan  5 21:51:02 2023 (1737330): Error Cannot kill process 1735123: Success!
    Thu Jan  5 21:51:03 2023 (1737176): Error Cannot kill process 1729555: Success!
    Thu Jan  5 21:51:05 2023 (1737207): Error Cannot kill process 1733928: Success!
    Thu Jan  5 21:51:06 2023 (1737337): Error Cannot kill process 1735140: Success!
    Thu Jan  5 21:51:07 2023 (1737336): Error Cannot kill process 1734001: Success!
    Thu Jan  5 21:51:08 2023 (1737242): Error Cannot kill process 1725450: Success!
    Thu Jan  5 21:51:09 2023 (1737245): Error Cannot kill process 1729962: Success!
    Thu Jan  5 21:51:10 2023 (1737261): Error Cannot kill process 1727778: Success!
    Thu Jan  5 21:51:11 2023 (1737210): Error Cannot kill process 1734691: Success!
    Thu Jan  5 21:51:12 2023 (1737174): Error Cannot kill process 1733986: Success!
    Thu Jan  5 21:51:13 2023 (1737241): Error Cannot kill process 1734107: Success!
    Thu Jan  5 21:51:14 2023 (1737260): Error Cannot kill process 1734696: Success!
    ～～～ 沢山 ～～～
    
```

**Q1.** このログはどういった場合に出力されるログなのでしょうか？  
Apacheの子プロセスが何らかの原因によって使用できなくなり、`mpm
prefork`が過剰なスタンバイプロセスを`kill`しようとしたができなかったといった状況の時に発報するログなのでしょうか。

**Q2.** 原因がApacheが利用できない子プロセスを`kill`できないことだとして、これを解決する設定などはあるのでしょうか？

本来であれば復旧前に`systemctl status apache2`等で状態を確認しておくべきだったかと思いますが、確認できていませんでした。

## 気になる点

  * 上記のログは事象発生から2～3分程度頻発し、その後ログの出力は無くなった。
  * 事象発生時以降のEC-CUBEのログ出力は無い。
  * ロードバランサーのアクセスログを確認したが、事象発生前に急激なアクセス増加があったわけではない。
  * Apacheのプロセス数が上限で張り付いた際も、CPUおよびメモリの使用率には若干の余裕があった。
  * 事象発生に呼応する様にCPUおよびメモリの使用率が減少していたのでメモリリークやCPUの頭打ちといったことが原因ではないと思われる。
  * 上記のログ以外に怪しいログは無く、普段通りのログの状況であった。

情報が非常に少なく申し訳ございませんが、皆様のお知恵をお貸しいただければ幸いです。  
宜しくお願い申し上げます。
CC BY-SA 4.0
2023-01-06T08:31:09.010
93216
2023-01-10T13:50:34.903
56419
question
ubuntu apache
子プロセスの起動数が上限に張り付いてApacheが応答しなくなりました。
検索すると、以下のような報告が見つかりました。  
<https://serverfault.com/questions/963166/>  
<https://github.com/mind04/mod-ruid2/issues/17>

"Error Cannot kill process" のログは PHP opcache モジュールで出力しているようですが、opcache
モジュールを有効にしていますでしょうか？

> Q1. このログはどういった場合に出力されるログなのでしょうか？

推測ですが、処理したリクエスト数が MaxConnectionsPerChild に達し httpd 子プロセスを終了(＆起動)する際に、PHP
モジュール側に何らかの問題があり出力されているのではないでしょうか。

> Q2. 原因がApacheが利用できない子プロセスをkillできないことだとして、これを解決する設定などはあるのでしょうか？

(上記推測が合っているとの仮定で)  
MaxConnectionsPerChild を大きな値にすると、プロセス終了＆起動の頻度が低くなり、該当ログの出力頻度も抑えられると思います。  
また、PHP モジュールで httpd に組み込むのではなく php-fpm (別プロセス) にすることで、httpd プロセス終了＆起動が PHP
に影響を及ぼさず、結果として "Error Cannot kill process" の状況にならないことが期待できます。
CC BY-SA 4.0
2023-01-10T13:50:34.903
93292
2023-01-10T13:50:34.903
4603
93216
answer