1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHPを(動的に)20倍遅くする方法

Last updated at Posted at 2024-02-24

はじめに

運用環境で処理に遅延が発生した際、開発環境では再現が難しい場合があります。

そんなときに便利な、PHPやMySQL(MariaDB)をお手軽に遅くする方法です。

(Linux上で動作しているPHPを前提として書いてます)

CPUクォータ を設定して遅くする

PHP

下記コマンドでCPUの割り当てを「5%」に変更します。
(約1/20程度の速度になる)

# mpm_prefork の場合
$ sudo systemctl set-property --runtime httpd.service CPUQuota=5% 

# PHP-FPM 利用時
$ sudo systemctl set-property --runtime php-fpm.service CPUQuota=5%
  • --runtimeを指定しない場合は、設定が永続化されます
    (--runtimeを付けた場合は、OSの再起動で設定がリセットされます)

MySQL(MariaDB)

# MariaDB の場合
$ sudo systemctl set-property --runtime mariadb.service CPUQuota=5%

# MySQL の場合
$ sudo systemctl set-property --runtime mysqld.service CPUQuota=5%

戻し方

OSを再起動すれば元に戻ります。
もしくはCPUQuota=100%で上書きすることでも元に戻ります。

効果

Apacheのアクセスログで処理にかかった時間を計測
PHP、DB共にCPUQuota=5%とした場合、ちょうど20倍の時間がかかりました。

変更前

  • 平均: 180ms
    変更後
  • 平均: 3600ms

ちょっと解説

systemdにコントロールグループ(cgroup)が組み込まれており、リソースを動的に変更する仕組みがあるためその機能を利用しています。

動的に変更した値は下記の手順で調べることができます。

systemctl show httpd | grep DropInPaths
DropInPaths=/run/systemd/system/httpd.service.d/50-CPUQuota.conf

DropInPathsはユニットファイルの設定を上書きするための値を記述したファイルのパス(スペース区切りで複数)

cat /run/systemd/system/httpd.service.d/50-CPUQuota.conf
[Service]
CPUQuota=5%

ファイルを開くと設定が記述されています。
/runは、tmpfs としてマウントされているため、再起動時に消えます(メモリ上に保持されるファイルシステム)

ディスクIO帯域幅制限

ディスクIOを制限することもできます。
(ただし、DBにはバッファキャッシュやクエリキャッシュがあるので効果がまちまちでした)

# MariaDB の場合
$ sudo systemctl set-property --runtime mariadb.service BlockIOReadBandwidth="/dev/vda 100K"

/dev/vda の部分はマウントしているディスクのデバイス名を指定します。
100Kの部分はKB/sです。
環境により変わるためlsblk等で確認して設定してください。

lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  1024M  0 rom
vda    253:0    0   200G  0 disk
├─vda1 253:1    0     1M  0 part
├─vda2 253:2    0   500M  0 part /boot
├─vda3 253:3    0     4G  0 part [SWAP]
└─vda4 253:4    0 195.5G  0 part /

参考

コマンドラインインターフェイスからのパラメーターの設定

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?