Saya memiliki server rackspace yang telah saya sewa untuk menjalankan proyek pribadi saya. Karena saya murah, ia memiliki 256 MB RAM dan jujur tidak dapat menangani banyak. Kadang-kadang, ketika ada peningkatan tajam dalam lalu lintas, server memutuskan untuk mulai membunuh proses dan tampaknya mysqld adalah yang populer untuk mematikannya. Saya mencoba mengunjungi situs saya dan disambut dengan pesan bahwa ada kesalahan dalam membuat koneksi database. Pemeriksaan log mengungkapkan bahwa mysqld terbunuh karena kurangnya memori.
Karena saya masih miskin seperti kemarin dan tidak ingin meng-upgrade RAM VM rackspace saya, apakah ada cara saya bisa mengatakannya untuk secara otomatis me-restart mysqld ketika mati?
Saya punya pemikiran untuk menggunakan sesuatu seperti crontab, tetapi sayangnya, saya juga tidak tahu apa yang harus saya lakukan di sana. Saya kira saya adalah produk dari generasi "Linux di desktop Anda" karena saya dapat melakukan banyak hal di desktop dan laptop saya (yang menjalankan Linux hampir secara eksklusif), tetapi masih kurang banyak keterampilan administrasi server untuk Linux.
Server menjalankan CentOS 6.3
Jawaban:
Ini bukan solusi bersih, jelas akan lebih baik untuk menghindari masalah sejak awal. Lagi pula, saya tidak yakin bagaimana CentOS mengelola layanan tetapi saya pikir itu menggunakan
service
. Jika demikian, Anda dapat memeriksa apakahmysql
layanan berjalan denganPerintah ini akan berhasil keluar jika
mysql
sedang berjalan dan mengembalikan status keluar 0 jika saya tidak. Karena itu Anda dapat memulai layanan jika tidak berjalan dengan perintah ini:Anda dapat menambahkan baris ini ke
/etc/crontab
untuk meluncurkan perintah ini setiap menit:sumber
Ini sedikit mengganggu.
mysqld selalu direstart oleh mysqld_safe karena ada loop tak terbatas di bawah
mysqld_safe
untuk memeriksa shutdown abnormal. Jika kesalahan terlalu parah, bahkanmysqld_safe
tidak akan dapat memulai kembalimysqld
pada percobaan berikutnya.Mengingat situasi yang
mysqld_safe
dirancang untuk itu, mungkin bukan ide yang baik untuk memaksamysqld
memulai jikamysqld_safe
toh akan menolaknya.Anda harus menemukan log kesalahan di my.cnf itu akan berada di bawah
atau
Baca file teks (mungkin dengan menjalankan
tail -30 log-filename
) dan temukan sumber dari pemrosesan mysqld yang dimatikan.sumber
Dalam upaya brute force untuk menjaga semuanya dan berjalan pada VPS memori rendah, saya menggunakan modifikasi jawaban terdom untuk memeriksa dan me-restart MySQL.
Saya perlu berubah
mysql
untukmysqld
membuatnya bekerja. Tanpa itu saya akan mendapatkan kesalahan, "ERROR! MySQL is running but PID file could not be found
".Pada sistem CentOS 7.2 saya,
/sbin/service
dialihkan ke/bin/systemctl status
, jadi perintah berikut ini lebih cepat dijalankan.Saya akhirnya menambahkan baris berikut ke root crontab sistem. Ia memeriksa setiap menit jika MySQL berjalan dan mengarahkan stdout ke nol. Memulai layanan tidak akan menghasilkan apa pun kecuali terjadi kesalahan, jadi tidak perlu menambahkan pengalihan nol pada perintah terakhir.
Pipa ganda
||
berartiOR
dan akan menjalankan perintah ke-2 jika perintah pertama gagal. (Mengembalikan kode keluar lebih besar dari nol.)Ini seperti mengatakan, "Jalankan perintah 1, atau , jika perintah 1 gagal, jalankan perintah 2".
Ini tidak seperti amper ganda dan
&&
yang seperti mengatakan, "Jalankan perintah 1, dan , hanya jika perintah 1 berhasil, jalankan perintah 2".sumber
Berikut ini adalah dari jonnyreeves.co.uk :
Dan pelakunya adalah php-fpm! Google cepat menemukan pelanggan Wordpress lain menderita gejala yang sama; sarannya adalah men-tweak konfigurasi php-fpm pool (/etc/php-fpm.d/www.conf) dan mengubah konfigurasi pm. Perubahan utama adalah pindah dari
pm = dynamic
kepm = ondemand
denganpm.max_children
nilai5
(berdasarkan mengamati ~ 5% penggunaan memori per pekerja). Setelah mengubah konfigurasi saya me-restart semua layanan dan memeriksa penggunaan memori.Setelah memulai kembali penggunaan memori secara dramatis lebih rendah.
sumber