Gzip, Apache Tuned, MPM+php-fpm Kurulum ve Ayarlar [3]

Yazar: | 28 Aralık 2017

Önceki makalede, WordPress’i hızlandırmak için PHP hızlandırıcı OPCache’i yükledik ve MariaDB için parametreleri düzenledik. Bölüm 3’te sadece standart CentOS kütüphanelerini kullanarak WordPress hızlandırmayı öğreneceğiz. Bu yazıda gzip ve MPM + php-fpm kurulumu ile performans artışını deneyimleyeceğiz.

Bölümler


Gzip Sıkıştırma ile Yanıt Süresini Azaltma

İlk olarak, iletim süresini kısaltmak için Apache ayarlarını kullanacağız.

Temel olarak, web sunucusundan tarayıcıya gönderilen HTML veya dosyalar, süreyi kısaltmak için gzip ile sıkıştırılacak. Bu yöntem HTML ve XML’de olduğu kadar CSS ve JavaScript dosyalarında da çalışacaktır.

gzip bir metin dosyasını orijinal boyutunun 1/4’ü kadar sıkıştırabilir. Bununla birlikte yalnızca hızımızı arttırmakla kalmayacak, aynı zamanda bant genişliği tasarrufu da edeceğiz.

Ayrıca, tarayıcı önbelleğini güçlendirme ayarları yapacak, Expire ve Cache-Control satırlarında değişiklikleri işleyeceğiz.

Apache yapılandırma dosyası httpd.conf içerisine aşağıdaki kodları ekleyeceğiz.

nano /etc/httpd/conf/httpd.conf

CTRL + V tuşlarına basılı tutarak sayfa sonuna kadar gidebiliriz. Aşağıda vereceğim kodları sağ tuş ile yapıştırıyoruz.

Apache gzip sıkıştırma kod satırları:

# gzip setting

AddOutputFilterByType DEFLATE text/html text/plain text/css

AddOutputFilterByType DEFLATE text/javascript application/x-javascript application/javascript

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4.0[678] no-gzip

BrowserMatch \bMSIE !no-gzip !gzip-only-text/html# expire setting

ExpiresActive On

ExpiresDefault "access plus 600 seconds"

ExpiresByType text/html "access plus 10 seconds"

Apache gzip ayarları ve kodları

Değişikliklerin geçerli olması için Apache’yi yeniden başlatın.

systemctl restart httpd

Anasayfayı açın ve yenileyin, kaynak dosyalarının, CSS ve JavaScript’in orijinal boyutlarının 1/4’e düştüğünü görebilirsiniz. Ve başlık sekmesine bakarsanız Content-Encoding altında “gzip” görürsünüz.

Bununla birlikte, F5 yerine sitenizdeki bağlantıları tıklayarak anasayfaya giderseniz, tarayıcı önbelleğinin expire (sona erme) ayarlarına göre çalıştığını göreceksiniz. Bu şekilde ana sayfa yükleme hızım yaklaşık 100 ms oluyor.

gzip pageload


Apache Tuned – Hazır Ayarlar ile Daha Fazla Optimizasyon

Tuned’i yapılandırıyor ve daha da fazla hız elde ediyoruz.

Tuned, sistem ayarlarını işletim sistemi durumuna göre en iyi hale getiren bir arka plan uygulamasıdır. Seçebileceğimiz birçok profil var, bu nedenle işletim sistemi temelli performansı artırmak için en uygun olanı seçmemiz önemlidir.

Aşağıdaki komutunu kullanarak mevcut profilleri ve o anda atanan profili görebilirsiniz.

tuned-adm list
[root@server ~]# tuned-adm list

Available profiles:

- balanced                    - General non-specialized tuned profile

- desktop                     - Optimize for the desktop use-case

- latency-performance         - Optimize for deterministic performance at the cost of increased power consumption

- network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance

- network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks

- powersave                   - Optimize for low power consumption

- throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads

- virtual-guest               - Optimize for running inside a virtual guest

- virtual-host                - Optimize for running KVM guests

Current active profile: virtual-guest

Yukarıda görebileceğiniz gibi, tuned profili virtual-guest (sanal-konuk) olarak ayarlanmıştır. Bunu, disk ve ağ I/O’yu artıran performansa dönüştürmek istiyoruz.

tuned-adm profile throughput-performance

Apache’yi MPM+php-fpm ile Yapılandırma

Bu ayarlarla bölümü bitireceğiz. Apache yapılandırmasını prefork MPM + mod_php’den, Event MPM + php-fpm’ye çevireceğiz.

Daha önce, Apache’nin ana çoklu işlem modülü prefork MPM idi, ancak Apache 2.4’den itibaren MPM’yi kullanmayı seçebilirsiniz. Event MPM’yi hızlı cgi’nin php-fpm ile birleştirirseniz, makineniz daha az bellek kullanır ve artan eşzamanlı bağlantılarla ilgili performans düşüşünü önler.

Karşılaştırma yapmak için, son zamanlarda popüler olan yüksek hızlı web sunucusu Nginx’e çok benzer. Muhtemelen bu yapılandırmanın yeni Apache olarak adlandırılmasının nedeni, Apache’nin bol modülleri ve esnek htaccess denetiminin olması ve daha iyi performans üretmesi olabilir.


php-fpm Kurulumu ve Etkinleştirme

yum install php-fpm -y
systemctl enable php-fpm
systemctl start php-fpm

Ardından aşağıdaki dosyalarda düzenleme yapacağız

  • /etc/httpd/conf.modules.d/00- mpm.conf
  • /etc/httpd/conf.d/php.conf
  • /etc/httpd/conf/httpd.conf

İlk olarak:

nano /etc/httpd/conf.modules.d/00-mpm.conf

5. ve 15. satırlarda değişiklik yapıyoruz.

5. satıra # işaretini koyarak mod_mpm_prefork deaktif, en alt satırdaki # işaretini kaldırarak mod_mpm_event aktif ediliyor. Olması gereken hali aşağıdaki gibi:

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:
 
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
 
# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
 
# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
LoadModule mpm_event_module modules/mod_mpm_event.so

 

İkinci adım:

nano /etc/httpd/conf.d/php.conf

Konfigürasyon dosyasının başına <IfModule prefork.c>, sonuna ise </IfModule> ekliyoruz. Olması gereken son hal:

<IfModule prefork.c>

# Cause the PHP interpreter to handle files with a .php extension.
#
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
 
#
# Allow php to handle Multiviews
#
AddType text/html .php
 
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
 
#
# Uncomment the following lines to allow PHP to pretty-print .phps
# files as PHP source code:
#
#<FilesMatch \.phps$>
#    SetHandler application/x-httpd-php-source
#</FilesMatch>
 
#
# Apache specific PHP configuration options
# those can be override in each configured vhost
#
php_value session.save_handler "files"
php_value session.save_path    "/var/lib/php/session"
</IfModule>

 

Üçüncü olarak:

nano /etc/httpd/conf/httpd.conf

Açtığımız dosyada CTRL + W tuşlarına bastıktan sonra IfModule dir_module satırını buluyoruz.

DirectoryIndex index.html satırına index.php ekliyoruz.

İlgili satırın son hali:

<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>

Ardından CTRL + V tuşları ile sayfanın sonuna inerek aşağıdaki satırları ilave ediyor, CTRL + X ile kaydediyoruz.

<IfModule mpm_event_module>
StartServers             2
MinSpareThreads         25
MaxSpareThreads         50
ThreadsPerChild         50
MaxRequestWorkers       50
MaxConnectionsPerChild   0
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
</IfModule>

Değişikliklerin geçerli olması için Apache’yi yeniden başlatın.

systemctl restart httpd

Anasayfayı birkaç kez yeniledikten sonra ab komutuyla benchmark testi yapıyoruz.

ab -n 100 -c 10 http://herhangi.net/

Sonuç:

Document Path:          /
Document Length:        53259 bytes
Concurrency Level:      10
Time taken for tests:   11.209 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      5358500 bytes
HTML transferred:       5325900 bytes
Requests per second:    8.92 [#/sec] (mean)
Time per request:       1120.926 [ms] (mean)
Time per request:       112.093 [ms] (mean, across all concurrent requests)
Transfer rate:          466.84 [Kbytes/sec] received
Connection Times (ms)

min  mean[+/-sd] median   max

Connect:        0    0   0.1      0       0
Processing:   155 1098 133.3   1086    1312
Waiting:      115 1041 126.8   1031    1257
Total:        156 1098 133.3   1086    1312

Yaptığımız değişikliklerin performansa etkileri aşağıdaki tabloda.

Optimize Konusu Sayfa yükleme süresi
(varsayılanla karşılaştırıldığında)
Saniye başı istek
(Requests per second)
Varsayılan kurulum 471 ms 5.25
APC 299 ms (Değişim %36.51) 7.92
OPcache+APCu 276 ms (Değişim %41.40) 8.27
MariaDB Ayarları 240 ms (Değişim %49.04) 8.99
Tuned, gzip, MPM+php-fpm 100 ms (Değişim %78.76) 8.92

Serinin tüm bölümleri:

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir