キャッシュや持続性接続で、瞬間的に早い場面が増えたが、一定時間経過するとやはり遅くなる。
DBやPHPの動作を見ていると、アイドル時間が一定に達したタイミングでプロセスが終了したり、DBセッションが終了していた。
今日はこれを変更してみる。
データベース – Azure Database for MySQL
Azureのポータルから「Server parameters」より以下の設定を120から変更![]()
モニタしていると120秒きっちりに持続性接続が失われていたので、この設定を変更した。
28800秒→480分→8時間
なんとなく日本の1日のフルタイム就業時間。
(ただし、リクエストがあると残業対応)
App Service
Azure のポータルから「アプリケーション設定」よりPHPの設定をオフ

とすると、当然PHP動かなくなる。
次にサイトルートの web.config でハンドラの設定追加。
<configuration>
<system.webServer>
<fastCgi>
<application fullPath="D:\Program Files\PHP\v7.2\php-cgi.exe"
arguments=""
maxInstances="0"
idleTimeout="28800"
monitorChangesTo="php.ini"
activityTimeout="600"
requestTimeout="601"
instanceMaxRequests="10000"
protocol="NamedPipe"
flushNamedPipe="false">
<environmentVariables>
<environmentVariable
name="PHP_FCGI_MAX_REQUESTS"
value="10000" />
</environmentVariables>
</application>
</fastCgi>
<handlers accessPolicy="Read, Script">
<add name="PHP-FastCGI"
path="*.php"
verb="GET,HEAD,POST"
modules="FastCgiModule"
scriptProcessor="D:\Program Files\PHP\v7.2\php-cgi.exe"
resourceType="Either"
requireAccess="Script" />
</handlers>
</system.webServer>アイドルの時間をidleTimeout=”28800″として、上記のDB接続の就業時間に合わせた。他は、おそらく元と同じ設定になってるはず…。
(10000要求こなした場合も、就業終了。)
これで、ポータルからアプリケーション再起動させて、無事に起動。
Kuduで見る限り、アイドル時間の長いプロセスが増えてる気がしている。
追記
この Web.config に記述する方法は、Managedな App Service の機能を一つ殺しているので、当然お勧めしない。(要するに運用する手間が増える。今後想定外の動きになる可能性がある。)また持続性や永続化に伴って、小さな問題が積もって大きな問題になる可能性もあるので、経過を見てみる必要がある。


