Koreksi : waktu respons ( %D
) adalah μs bukan ms! 1
Ini tidak mengubah apa pun tentang keanehan pola ini, tetapi itu berarti bahwa cara ini praktis tidak terlalu merusak.
Mengapa waktu respons berkorelasi terbalik dengan frekuensi permintaan?
Bukankah seharusnya server merespons lebih cepat ketika kurang sibuk menangani permintaan?
Adakah saran bagaimana membuat Apache "mengambil keuntungan" dari beban yang lebih sedikit?
Pola ini periodik. Itu berarti akan muncul jika tayangan turun di bawah sekitar 200 permintaan per menit - yang terjadi (karena aktivitas pengguna alami) dari larut malam hingga dini hari.
Permintaan POST sangat sederhana mengirim JSON kurang dari 1000 karakter - JSON ini disimpan (ditambahkan ke file teks) - itu saja. Jawabannya hanya "-".
Data yang ditampilkan dalam grafik dicatat dengan Apache itu sendiri:
LogFormat "%{%Y-%m-%d+%H:%M:%S}t %k %D %I %O" performance
CustomLog "/var/log/apache2/performance.log" performance
sumber
Jawaban:
Ini adalah perilaku umum di pusat data. Waktu respons Anda lambat sesuai dengan apa yang biasa disebut Jendela Batch. Ini adalah periode waktu ketika aktivitas pengguna diharapkan rendah dan proses batch dapat dijalankan. Pencadangan juga dilakukan selama periode ini. Aktivitas ini dapat menyaring sumber daya server dan jaringan yang menyebabkan masalah kinerja seperti yang Anda lihat.
Ada beberapa sumber yang dapat menyebabkan masalah:
Saya gunakan
sar
untuk menyelidiki dikeluarkan seperti ini.atsar
dapat digunakan mengumpulkansar
data menjadi file data harian. Ini dapat diperiksa untuk melihat seperti apa perilaku sistem pada siang hari ketika kinerja normal, dan overnite ketika kinerja variabel.Jika Anda memantau sistem dengan
munin
atau sistem lain yang mengumpulkan dan membuat grafik pemanfaatan sumber daya, Anda dapat menemukan beberapa indikator di sana. Saya masih menemukan yangsar
lebih tepat.Ada alat seperti
nice
danionice
yang dapat diterapkan pada proses batch untuk meminimalkan dampaknya. Mereka hanya efektif untuk masalah CPU atau I / O. Mereka tidak mungkin menyelesaikan masalah dengan Memori atau aktivitas Jaringan.Memindahkan aktivitas cadangan ke jaringan terpisah dan mengurangi pertikaian jaringan. Beberapa perangkat lunak cadangan dapat dikonfigurasi untuk membatasi bandwidth yang akan digunakan. Ini bisa menyelesaikan pertengkaran jaringan.
Bergantung pada bagaimana proses batch dipicu, Anda mungkin dapat membatasi jumlah proses batch yang berjalan secara paralel. Ini sebenarnya dapat meningkatkan kinerja proses batch karena mereka kemungkinan mengalami pertentangan sumber daya yang sama.
sumber
sar
mungkin bermanfaat. Saya menemukan ini: en.wikipedia.org/wiki/Sar_(Unix)Hubungan ini dapat terjadi ke arah lain jika pengirim permintaan menunggu permintaan sebelumnya untuk menyelesaikan sebelum mengirimkan yang baru. Dalam hal itu, lalu lintas turun seiring bertambahnya waktu permintaan (untuk alasan apa pun), karena antrian sisi klien.
Atau itu bisa menjadi artefak pengukuran Anda - jika grafik di atas menunjukkan permintaan yang telah selesai , yang bertentangan dengan permintaan yang tiba , kurs akan turun ketika waktu pemrosesan permintaan bertambah (dengan asumsi kapasitas terbatas: D).
sumber
Meskipun jawaban @ BillThor mungkin benar, tampaknya tidak mungkin bahwa periode beban rendah sepenuhnya diambil oleh proses cadangan (yaitu bahwa periode tersebut cocok dengan tepat).
Penjelasan alternatif hanyalah caching. Jika skrip / database / apa pun yang diberikan belum digunakan baru-baru ini, data cache yang relevan mungkin telah dibuang untuk mengosongkan memori untuk sisa sistem operasi. Ini mungkin indeks pada database, atau buffer O / S dalam kaitannya dengan file, atau yang serupa lainnya. Permintaan kemudian harus menyusun kembali informasi ini jika sudah lama sejak permintaan terakhir. Dalam periode sibuk ini tidak akan terjadi karena kueri terakhir akan sering. Ini juga akan menjelaskan mengapa Anda melihat waktu respons rendah dan waktu respons tinggi selama periode sibuk.
sumber
strace
proses Apache, Anda tidak melihatread()
panggilan sistem atau yang serupa? Itu akan sangat tidak biasa.echo 3 > /proc/sys/vm/drop_caches
setiap 5 detik selama satu menit dan lihat apakah Anda mendapatkan efek yang sama pada waktu respons.Apa yang Anda lihat di sana terlihat, bagi saya, seperti itu bisa menjadi masalah statistik. Mungkin tidak, jawaban BillThor mungkin benar, tetapi saya akan memposting ini untuk kelengkapan.
Grafik waktu respons didasarkan pada persentil. Kelompok sampel 800-1000 permintaan adalah jumlah sampel yang baik untuk ini, kelompok 50-100 permintaan mungkin tidak begitu banyak.
Jika Anda menganggap bahwa jumlah permintaan lambat bukan fungsi linier dari volume permintaan, sehingga urutan kenaikan permintaan tidak menghasilkan urutan peningkatan permintaan lambat, maka volume permintaan yang lebih tinggi akan menghasilkan waktu permintaan rata-rata yang lebih rendah.
sumber
Ada kebohongan, kebohongan besar, dan statistik.
Hipotesis saya: Anda memiliki tiga kategori permintaan yang berbeda:
Pada malam hari, 50 permintaan per menit juga 20 + 20 + 10. Jadi, hasil 50% persentil sekarang sangat bergantung pada hasil stream 2. Dan 95% persentil bergantung pada stream 3 sehingga bahkan tidak pernah dapat ditampilkan pada grafik.
Pada siang hari, aliran 2 + 3 tersembunyi dengan baik di atas persentil 95%.
sumber
Semakin saya melihatnya, semakin saya cenderung berpikir bahwa ada masalah dengan pengumpulan data.
Pertama, ada sesuatu yang sangat aneh terjadi dengan TPS Anda. Sementara pola keseluruhan terlihat normal, ada jeda yang sangat tajam terjadi sekitar jam 9 malam, dan sekali lagi sekitar jam 7 pagi. Grafik normal akan jauh lebih mulus selama transisi ke jam-jam tidak sibuk.
Itu menunjukkan bahwa ada perubahan dalam profil, dan Anda mungkin memiliki 2 jenis klien yang berbeda:
Petunjuk kedua adalah sekitar pukul 18:00. Sebagian besar waktu sebelum dan sesudah, kita memiliki tinggi profil Volume - TPS tinggi dan latency rendah. Tetapi sekitar pukul 18:00 ada penurunan tiba-tiba dari 800-1000 RPM menjadi kurang dari 400 RPM. Apa yang mungkin menyebabkan itu?
Petunjuk ketiga adalah langkah-turun dalam waktu respons persentil ke-5. Saya sebenarnya lebih suka melihat waktu respons minimum (tetapi persentil ke-5 mungkin lebih baik) karena dua alasan: Ini memberi tahu saya waktu layanan (yaitu waktu respons dikurangi antrian), dan waktu respons cenderung mengikuti distribusi Weibull yang berarti mode (atau nilai paling umum) tepat di atas minimum.
Jadi langkah-turun dalam persentil ke-5 mengatakan kepada saya bahwa ada jeda seri yang tiba-tiba, dan waktu layanan telah benar-benar turun meskipun variasi dan waktu respons rata-rata telah sangat meningkat.
Langkah selanjutnya
Pada tahap ini saya akan melakukan penyelaman yang dalam ke log untuk mencari tahu apa yang berbeda tentang sampel volume rendah pukul 18:00 dibandingkan dengan sampel volume tinggi sebelum dan sesudahnya.
Saya akan mencari:
BTW, "acara" pukul 18:00 adalah bukti yang cukup bagi saya bahwa tidak ada hubungannya dengan kemacetan / aktivitas pusat data. Untuk itu benar, kemacetan harus menyebabkan penurunan TPS, yang mungkin terjadi pada pukul 18:00 tetapi sangat tidak mungkin menyebabkan penurunan TPS yang berkelanjutan dan melengkung dengan lancar selama 10 jam antara jam 9 malam dan 7 pagi.
sumber