Saya punya server web berdasarkan Linode 1024 VPS berdasarkan
- Ubuntu 11.10
- Nginx 1.0.5
- PHP 5.3.6 (dengan PHP-FPM, APC)
- Varnish 3.0.2
Dan beberapa blog di sana berdasarkan WordPress 3.3.1. Salah satunya adalah blog biasa, dengan konfigurasi default, tema dan hanya posting "Hello World", untuk menguji server. Yang lain adalah blog yang dikloning dari server lain dengan hampir 10 ribu posting dan lebih dari 10 ribu komentar. Blog ini memiliki sekitar 5 ribu uniques per hari.
Server memberikan angka yang baik pada tes ab untuk blog tes , Tapi tes yang sama dengan blog yang dikloning tidak mungkin dilakukan: tes ab memuat server terlalu banyak, dan saya harus menghentikan prosesnya, yang membuat ab untuk menunjukkan hasil yang sangat buruk ini .
Htop juga menunjukkan beban "normal" ketika dalam operasi normal , tetapi beban besar tidak normal selama uji ab.
Ada hal aneh lain terjadi (yang paling penting bagi saya): Time To First Byte sangat tinggi , tetapi setelah itu menunggu situs memuat sangat cepat. Ini dapat dengan mudah diuji dengan layanan seperti tools.pingdom.com, yang memberikan hasil ini . Mohon perhatikan wilayah kuning itu yang berarti "Waktu tunggu".
Mengapa ini terjadi? Ide yang mungkin:
- Konfigurasi PHP-FPM salah
- Linode waktu respons DNS mengerikan. Omong kosong - tes blog menyelesaikan DNS baik, TTFB luar biasa
- Konfigurasi Nginx salah
Jika seseorang membutuhkan lebih banyak info,
- Di sini Anda mendapatkan file konfigurasi nginx blog yang dikloning saat ini ( /etc/nginx/sites-available/muycomputerpro.com )
- Di sini Anda punya my.cnf konfigurasi saat ini ( /etc/mysql/my.cnf ) (saya tahu, untuk saat ini tidak caching, ini tidak membuat perbedaan pada TTFB di masa lalu)
- Di sini Anda mendapatkan konfigurasi PHP-FPM saat ini ( /etc/php5/fpm/pool.d/www.conf )
if -f
arahan Anda menggunakan dalamlocation
wadah di konfigurasi nginx. Berdasarkan apa yang saya baca di sini wiki.nginx.org/Pitfalls , saya merasa bahwa-f
melakukan pencarian yang tidak efisien untuk file yang dapat menyebabkan masalah Time To First Byte, terutama jika Anda memiliki direktori dengan sejumlah besar file.ab -n 1000 -c 100 -H 'Host: mysite.com' http://127.0.0.1/
Yang mengatakan - perbedaan dalam cache (Varnish) vs hasil tidak di-cache cukup untuk memvalidasi posisi bahwa masalahnya tidak terkait dengan jaringan, dns, dll dan terletak pada pemrosesan, seperti yang diharapkan.Jawaban:
Pertama, ini bukan jawaban, lebih sebagai pendekatan diagnostik.
Ini sama sekali tidak komprehensif - atau bahkan sesuatu yang dekat, itu hanya titik awal.
Saatnya Byte Pertama
Waktu ke byte pertama (TTFB) memiliki sejumlah komponen:
Ketika Anda melihat output ApacheBench, Anda juga melihat:
Perbandingan untuk Menghilangkan komponen
Dengan beberapa pengecualian, masalah Anda akan terletak pada pemrosesan backend, yang biasanya disebabkan oleh kode yang terlalu rumit / tidak efisien, atau MySQL yang dikonfigurasi dengan buruk.
Cara yang baik untuk mendekati masalah ini adalah melalui serangkaian perbandingan yang akan menghilangkan berbagai aspek pengaturan Anda. Perbandingan yang baik harus tetap konstan sebanyak mungkin untuk membantu mempersempit masalah. Saat ini, Anda telah memberikan perbandingan berikut:
Tes yang ideal akan membuat Anda menduplikasi situs lengkap Anda, tetapi kemudian menghapus semua konten kecuali satu artikel dan komentar terkait. Tujuan dari tes ini adalah untuk menentukan secara meyakinkan apakah jumlah besar konten yang menjadi masalah atau apakah aspek lain dari pengaturan Anda (plugin wordpress, tema, dll) adalah penyebabnya. Anda pada dasarnya akan membandingkan kinerja situs yang identik, pada server yang sama (baru) - memuat halaman yang sama (panjang yang sama, dll) - dengan satu-satunya perbedaan adalah total konten situs (misalnya ada kemungkinan besar beberapa plugin tidak skala dengan baik dengan peningkatan konten).
Tanpa mengubah apa pun, ada beberapa perbandingan lain yang dapat Anda lakukan:
Tuning Backend Anda
Pada titik ini Anda seharusnya sudah menemukan masalah atau menyimpulkan bahwa masalahnya ada di backend Anda. Itu membuat Anda Nginx, PHP, atau MySQL.
(Saya harus menyebutkan di sini, yang selalu berguna untuk mengetahui apakah hambatan Anda adalah CPU, RAM, atau I / O - antara
sar
,top
,iostat
,vmstat
,free
., Dll Anda harus dapat datang ke beberapa kesimpulan tentang ini)Nginx
Nginx hanya menerima permintaan dan menyajikan konten statis atau memindahkan permintaan ke PHP-FPM - biasanya tidak banyak yang dioptimalkan dengan Nginx.
Idealnya, blog percobaan dan blog hasil kloning Anda memiliki konfigurasi yang identik, dalam hal ini, Anda telah secara efektif menghilangkan Nginx sebagai masalahnya.
Aplikasi
Dalam kasus di mana Anda mencoba mengidentifikasi masalah dalam kode Anda (misalnya plugin lambat, dll) log lambat adalah tempat untuk memulai.
MySQL
PHP
PHP-FPM
Perlu dicatat bahwa hasil htop Anda menunjukkan php-fpm mengkonsumsi sebagian besar CPU - dan masalah Anda tampaknya terkait langsung dengan ini.
Caching
Setelah Anda mengoptimalkan setiap kemacetan yang mungkin terjadi, mulailah melakukan caching.
Terkadang, mengingat keterbatasan aplikasi dan perangkat keras Anda, Anda mungkin tidak dapat meningkatkan kinerja backend sebanyak itu - namun, itulah titik caching - untuk meminimalkan penggunaan backend.
Bacaan lebih lanjut
sumber
memory_limit
, itu ditunjukkan di pos lain bahwa itu tidak membantu kinerja.