GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan perkiraan kasar kapasitas aplikasi LAMP?

ab agak mengganggu jika situs Anda membutuhkan cookie, dll, ab terlalu sederhana.

Pada dasarnya, dari pengalaman saya dalam memperbaiki beberapa situs web PHP yang meledak, biasanya seperti ini :

1) Orang-orang menggunakan MySQL

Anda benar-benar dapat menggunakan MySQL, facebook, dan flickr melakukannya (penggemar mysql menyukainya) JIKA ANDA TAHU GOTCHA yaitu:

  • Jika Anda memiliki tabel MyISAM non-baca-saja dan kueri apa pun yang lebih dari 100 kami (bahkan memilih), Anda mati

Di satu situs yang saya perbaiki, pria itu menyewa server double-quad-core karena "situsnya membutuhkan kekuatan". Saya melihat situsnya, saya melihat situs saya sebelumnya dengan> 100 ribu anggota dan pelacak torrent yang berjalan di server mikro-setengah-pizzabox Via C7, dan saya katakan padanya, situs Anda berjalan dengan baik di Celeron 300 yang ada di ruang bawah tanah saya , dan itu bahkan berlebihan, saya bisa menyewakannya kepada Anda dengan setengah harga Xeon Anda, lol.

Ternyata orang itu adalah pengembang yang baik dan orang yang sangat baik tetapi dia payah di MySQL, jadi situsnya memiliki Search Query From Hell yang khas yang dapat mematikan situs web apa pun :

  • 10 permintaan pencarian dari neraka per detik (dia memiliki 300 ribu anggota di situs warez ilegalnya)
  • kueri penelusuran dari neraka membutuhkan waktu sekitar 0,1 - 0,2 detik
  • aliran kecil pembaruan bersamaan ke tabel MyISAM yang sama untuk membumbui segalanya

=> serialisasi total (kunci tulis MyISAM) dari semua kueri. 1 core 100%, 7 core idle, loadavg> 1000 (ya dia menggunakan apache), waktu halaman> 30 detik, berhasil.

Perbaiki itu mudah:optimalkan permintaan pencarian dari neraka, perbaiki poin 2) di bawah, beralih ke InnoDB, beralih ke lighttpd. loadavg turun menjadi 0,02

2) UPDATE

Tidak ada yang tertarik dengan penghitung halaman. Keluarkan 1 PEMBARUAN untuk setiap tampilan halaman dan Anda mati. Tambahkan beberapa MyISAM untuk efek lainnya. Juga pembunuh di InnoDB, bukan tentang penguncian, melainkan tentang sinkronisasi disk IO menunggu.

3) TEKSPENUH

  • MyISAM tidak dapat digunakan untuk tabel baca-tulis karena terkunci.
  • MyISAM dapat diandalkan seperti ramdisk (sebenarnya, lebih sedikit:Anda memerlukan kerusakan OS untuk merusak ramdisk, merusak tabel MyISAM hanya memerlukan kerusakan MySQL atau terlalu banyak menekannya secara bersamaan, Anda akan mendapatkan "mesin tabel tidak dikenal error", saya melihat ini berkali-kali)
  • FULLTEXT tidak tersedia di InnoDB
  • Penyisipan apa pun dalam indeks FULLTEXT memicu pembangunan kembali indeks hampir penuh (ketika saya menyisipkan posting forum, itu membangun kembali indeks sebesar 400 MB)

==> Jika Anda memerlukan pengindeksan teks lengkap, performa, dan keandalan, gunakan Sphinx atau Xapian.

Saya belum mencoba Sphinx (orang mengatakan hal-hal baik tentangnya), tetapi Xapian dengan senang hati menelusuri teks berukuran 4 GB dalam sekejap.

4) Orang menggunakan apache.

Ini dengan baik digabungkan dengan poin-poin di atas.

Tidak seperti server yang tepat seperti lighttpd yang penggunaan CPU-nya tidak terdeteksi (Via C7 yang payah melayani 100 HTTP hits/s dan lighttpd menggunakan kurang dari 1% CPU), apache akan mematikan komputer Anda.

Ketika MySQL mulai mati (mudah mati), klien mulai memukul F5 dengan keras, dan segera Anda memiliki sekitar 1000 proses apache, masing-masing memegang juru bahasa PHP, dan setiap juru bahasa PHP memegang koneksi MySQL yang menganggur, menunggu kunci MyISAM, kecuali satu, yang melakukan beberapa UPDATE sepele dari penghitung tampilan halaman Anda, tetapi itu membutuhkan waktu, karena server pergi ke pertukaran makan siang, karena proses 1000 apache dan 1000 php dan 1000 mysql.

Lighttpd tidak menggunakan cpu untuk halaman statis. Satu-satunya cara agar lighttpd memenuhi CPU Anda adalah jika Anda menekannya dengan apachebench dengan kecepatan seperti 20 ribu permintaan/dtk. Kemudian Lighttpd berbicara dengan beberapa, seperti 10 backend php-fcgi (2-4 per inti bagus) yang berbicara dengan beberapa koneksi MySQL. Semuanya jauh lebih cepat sebagai hasilnya, dan saat kelebihan beban, itu menurun dengan baik, bukan eksplosif.

Untuk mendapatkan pertanyaan awal, Anda pasti ingin membuat profil kueri SQL Anda. Tambahkan log kueri ke aplikasi PHP Anda yang menampilkan (hanya untuk Anda), daftar kueri dan waktu yang diperlukan, dan juga waktu dari awal skrip PHP hingga akhir (termasuk header/footer adalah tempat yang baik untuk ini).

Untuk halaman yang kompleks (tidak termasuk pencarian), Anda mengharapkan sekitar 3 ms MySQL dan 3 ms PHP, itu target yang bagus. Anda tentu saja memerlukan cache kode yang dikompilasi PHP.


Untuk muatan saat ini, ada beberapa hal yang dapat Anda lakukan. Jawaban termahal namun terinci akan diberikan melalui aplikasi perusahaan seperti "Gomez".

Namun, jika Anda ingin melakukannya sendiri, lihat jawaban saya sebelumnya di bawah atau gunakan utilitas shell seperti:htop, top, w, dan manfaatkan status server Apache

Jawaban sebelumnya sebelum revisi pertanyaan:

Apa yang Anda minta terkadang disebut pembuatan profil aplikasi.

Anda perlu membuat rumus memori kasar seperti:

httpd ram + penggunaan memori php + penggunaan proses mysql =total jejak memori permintaan

Anda juga akan memerlukan rumus CPU, tetapi Anda juga dapat mengamatinya selama uji beban.

Apache memiliki perintah 'ab'.

"ab adalah alat untuk membandingkan server Apache Hypertext Transfer Protocol (HTTP) Anda. Ini dirancang untuk memberi Anda gambaran tentang bagaimana kinerja instalasi Apache Anda saat ini. Ini terutama menunjukkan kepada Anda berapa banyak permintaan per detik yang mampu dilayani oleh instalasi Apache Anda. " http://httpd.apache.org/docs/2.0/programs/ab.html

Berikut adalah baris perintah patokan 'ab' umum:

ab -n 10 -c 1 http://www.yoursite.com/
# qty 10 total requests, 1 request at a time

Strateginya adalah menguji beban per proses (pengguna) pada aplikasi Anda dari permintaan halaman web hingga selesai. Jika Anda dapat mengidentifikasi berapa banyak ram yang digunakan Apache, PHP, dan MySQL untuk setiap permintaan, maka Anda dapat dengan cepat mengidentifikasi kapasitas sistem Anda.

Anda mungkin harus menggunakan campuran alat diagnostik seperti vmstat atau top atau iostat atau ps, dll. untuk mengambil snapshot dari sejumlah permintaan yang akan diminta dari sistem Anda.

Terakhir, Anda ingin menginstal Xdebug. Alat ini akan membantu Anda membuat profil sisi php dari application.http://xdebug.org/

Berikut adalah tutorial IBM untuk menginstal Xdebug:

http://www.ibm.com/developerworks/opensource/library/os-php-fastapps2/


Linux
  1. Cara Memasang LAMP Stack di Ubuntu 22.04 LTS

  2. Cara Install Apache, MySQL, PHP (LAMP) di CentOS/RHEL 7

  3. Cara Menginstal Apache, MySQL, PHP (LAMP) di Ubuntu 16.04 LTS

  1. Cara Install LAMP (Apache, MySQL, PHP) di Debian 11

  2. Cara mendapatkan versi MySQL/Apache/PHP

  3. Cara Instal LAMP Apache, MySQL, PHP di Debian 11

  1. Cara Install LAMP (Apache, MySQL, PHP) di Debian 9 Stretch

  2. Cara Install LAMP (Apache, MySQL, PHP) di Debian 8 Jessie

  3. Cara Instal LAMP Apache, MySQL, PHP di Ubuntu 22.04