PHP7 Casual Talks 2でI○UCON対策について話してきました。

2016-04-21
php
ISUCON

過日、PHP7に関わることなら何でもいいというイベントが開催されていたので、参加&登壇してきました。

PHP7 Casual Talks #2「速さ」
php7casual talks

1サーバにWEB+DB突っ込んで並列実行のアクセスをかけまくって、どんな構成が一番パフォーマンス出るんだ?
という検証の報告です。

当日発表のスライドはこちら。

細かい設定内容とかには触れられなかったので、ココであげときます。

使った環境

  • Ubuntu 14.04LTS
  • CPU 2 Processer
  • Memory 2048MB

※VirtualBox上にVagrantを使って構築。

OSの設定

  • /etc/security/limits.conf
1
2
* hard nofile 65535
* soft nofile 65535
  • /etc/sysctl.conf
1
2
3
4
5
6
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.ip_local_port_range = 10000 65000
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10

Nginxの設定

  • /etc/nginx/nginx.conf
1
2
worker_processes 1 => 2;
worker_connections 256 => 2048;

php-fpmの設定

  • /etc/php/7.0/fpm/pool.d/www.conf
1
2
3
4
pm.max_children = 100
pm.start_servers = 40
pm.min_spare_servers = 20
pm.max_spare_servers = 60

※初期値のx20

メモ

php-fpmとnginx間の接続をTCP Socketに変更した構成が、最もパフォーマンスが出ました。
php-fpmの設定値は、どの構成でも色々といじって見ましたが、あまり効果無し。

今後は、php-fpmとnginxの構成に焦点を絞って、さらならベンチマークを行う予定です。
どこかで機会があればまた発表します。
(終わりはあるのか・・・汗)

宿題事項

  • CPU・Memoryがまた若干余っている。(負荷をかけきれてない)
  • Unix Domain Socketを使ったFastCGI接続した際に、高負荷時でエラーが出るのは何故?