Saya mengalami beberapa masalah dengan server LAMP saya. Baru-baru ini semuanya menjadi sangat lambat, meskipun jumlah pengunjung di situs web saya tidak banyak berubah. Ketika saya menjalankan top
perintah, dikatakan bahwa proses MySQL telah mengambil alih 150-200% CPU. Bagaimana mungkin, saya selalu berpikir bahwa 100% adalah maksimum?
Saya menjalankan Ubuntu 9.04 edisi server dengan RAM 1,5 GB.
my.cnf
pengaturan:
key_buffer = 64M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 200
table_cache = 512
table_definition_cache = 512
thread_concurrency = 2
read_buffer_size = 1M
sort_buffer_size = 4M
join_buffer_size = 1M
query_cache_limit = 1M # the maximum size of individual query results
query_cache_size = 128M
Berikut ini adalah output dari MySQLTuner :
The top
perintah:
Apa yang bisa menjadi penyebab masalah ini? Bisakah saya membuat perubahan pada saya my.cnf
untuk mencegah server hang?
mysql
performance
cpu-usage
Temnovit
sumber
sumber
Anda memiliki prosesor yang memiliki lebih dari satu inti, atau Anda memiliki banyak prosesor. Jika Anda memiliki dua inti dan suatu proses menggunakan 100% dari kedua inti, itu akan ditampilkan sebagai 200% di atas.
Demikian juga, ini sepertinya berfungsi sebagaimana mestinya - tidak ada yang salah dengan konfigurasi Anda. Jika Anda sering mengalami hang, dari apa yang Anda posting, Anda mungkin ingin melihat menambahkan indeks yang tepat ke tabel Anda (atau mengoptimalkan pertanyaan Anda).
sumber
Jalankan
top -H
untuk melihat semua utas yang berjalan dan bukan hanya keseluruhan proses. Juga, jika Anda menekan1
tombol saat di atas, itu akan menunjukkan kepada Anda penggunaan CPU untuk masing-masing CPU / core.sumber
Mysql memiliki banyak proses (utas) yang bekerja secara independen, satu, misalnya, bertanggung jawab untuk menulis data dari memori ke disk. Dengan banyak inti dalam CPU (dan / atau banyak CPU), lebih dari satu utas berfungsi, dan sehingga dapat menjalankan lebih dari 100% inti tunggal - pada tingkat sederhana, mungkin 75% dari masing-masing dua inti berjalan , memberi 150%.
sumber
Saya perhatikan ada masalah, tidak terkait dengan CPU. Jika Anda menggunakan apache dan MySQL di server yang sama, Anda dapat mencapai kondisi buruk ( RAM ) ketika aktivitas apache Anda meningkat.
MySQLTunner memberi tahu Anda bahwa dengan menggunakan 200 koneksi yang tersedia (pengaturan koneksi maksimal Anda), Anda akan mengisi RAM. Katakanlah Anda memiliki apache terbatas hingga 150 proses, Anda tentu tidak akan memiliki cukup RAM ketika MySQL dan apache akan mencoba menggunakan 150 koneksi (karena Apache juga pemakan RAM yang baik).
Jadi ini tentang RAM dan Anda mungkin belum menekan :-) Perintah teratas hanya menampilkan 15 proses apache (tapi Anda sedang memuat rata-rata 3/6/16 sehingga berarti badai itu 15 menit yang lalu dan sekarang dalam pergi).
Tentang masalah CPU, untuk melengkapi respon yang baik dari shakalandy , ini mungkin karena satu permintaan tunggal. Itu bisa berada di meja besar, atau melakukan banyak tugas indeks ulang, atau menggunakan banyak file sementara, indeks hilang (dihapus?), Dll. Satu-satunya cara untuk mendeteksinya adalah mengaktifkan log permintaan lambat (mungkin dengan tekanan tinggi, seperti 8s). Kemudian gunakan alat mysqlsla untuk menganalisis log kueri lambat ini, dan jalankan beberapa penjelasan pada kueri yang diidentifikasi.
sumber