Apakah kita memerlukan partisi Swap pada server LAMP?

14

Apakah kita perlu menukar partisi di ubuntu-server dengan LAMP? Saya pikir saya tidak membutuhkannya, tetapi lebih baik untuk mengetahui dengan pasti apakah itu tidak akan menyebabkan perilaku yang tidak terduga.
Sebenarnya pikiran saya adalah:

  • Server tidak pernah hibernasi
  • Jika sedang bertukar satu perlu berpikir tentang loadbalancing / traffic shaping, dll ...

Apakah saya benar, bisakah saya mematikan swap untuk server produksi?

Terima kasih!

Arman
sumber

Jawaban:

14

Apakah saya benar, bisakah saya mematikan swap untuk server produksi?

Tidak. Selalu punya ruang swap.

Saya mencoba menjalankan server produksi tanpa swap sekali dan sekitar seminggu kemudian, setelah pembaruan Wordpress, PHP mulai memakan lebih banyak RAM daripada yang kami perhitungkan. Ketika Anda kehabisan RAM dan Anda telah mengaktifkan swap, segalanya melambat (kadang-kadang banyak, kadang-kadang hanya sedikit, tergantung pada apa yang didorong di sana) tetapi Anda dapat masuk, menemukan masalah dan mencoba untuk memperbaiki Itu.

Ketika Anda kehabisan RAM dan tidak memiliki swap, proses mati, hal-hal macet dan banyak waktu satu-satunya pilihan Anda adalah reboot. Tetapi sampai Anda melakukan reboot, hal-hal mungkin akan pecah.

Di dunia saya, patah jauh lebih buruk daripada lambat.

Tentu saja jika Anda menemukan sistem Anda terus-menerus menggunakan sebagian besar swap (itu akan sangat sering menggunakan beberapa hanya sebagai cara untuk memindahkan barang-barang cache lama), Anda jelas memiliki masalah ("tolong masukkan RAM"), tetapi menjadikannya sebagai jaring pengaman sangat direkomendasikan.


Menanggapi komentar dari SpamapS:

Di dunia "situs web yang sukses", Anda memiliki failover panas, penyeimbangan beban, dan alat lain yang memungkinkan mesin meledak dan tidak memiliki efek pada bagian situs lainnya. Tapi itu membutuhkan banyak uang. Memiliki perangkat keras yang berlebihan tidak ekonomis untuk sebagian besar situs, bahkan jika mereka menghasilkan uang.

Saya sepenuhnya tidak setuju dengan komentar Anda tentang waktu aktif. Dalam pengaturan e-commerce tradisional jika orang tidak dapat melihat situs Anda, mereka tidak dapat membeli dari Anda. Ini bukan hanya e-commerce, semua kepentingan komersial daring mengambil lebih banyak kritik jika Anda tidak punya periode. Saya tahu karena saya meng-host situs dan layanan untuk perusahaan dan menjalankan situs saya sendiri. Lambat = pemarah tetapi Bawah = marah. Bahkan jika Anda hanya turun selama satu menit pada suatu waktu, jika pengguna melihat pemberitahuan "down-for-maintenance" lebih dari beberapa kali, mereka menganggap Anda tidak dapat mempertahankan situs.

Server lambat kurang dari ideal tetapi swap tidak ada untuk dijalankan setiap saat, ini adalah pilihan terakhir untuk memungkinkan hal-hal tetap berjalan saat Anda memperbaikinya.

Anda juga menganggap hanya ada satu layanan yang berjalan pada mesin. Sekali lagi ini mungkin benar jika Anda memiliki megabucks untuk membagi segala sesuatu tetapi di dunia nyata, semuanya disatukan. Beberapa situs web, ssh daemon, server ftp, server email, dll. Satu proses yang bocor bahkan mungkin tidak mempengaruhi layanan lain. Tanpa swap, semuanya memiliki peluang yang sama untuk penghentian instan dan acak. Anda tidak memiliki kendali atasnya.

Tentu saja swap bukan satu-satunya jawaban. Anda perlu memonitor untuk mengingatkan Anda ketika Anda kehabisan ram, tetapi hanya dengan mencabut plug and reboot bukan jawaban untuk sebagian besar orang. Saya yakin ini bekerja untuk situs web multi-nasional mana pun yang menjadi tanggung jawab Anda, tetapi bagi kami manusia biasa (yang menjadi mayoritas internet), melakukan itu adalah bunuh diri komersial.

Oli
sumber
Pengalaman yang sama di sini, agak ... itu adalah kesalahan di pihak saya bukan keputusan yang disengaja. Server tanpa swap adalah neraka untuk diperbaiki, terutama jika ia memutuskan untuk mematikan sshd.
Javier Rivera
Saya memiliki RAM sekitar 16Gb, setengahnya di-cache untuk IO cepat, sisanya untuk LAMP, Swap selalu gratis, atau beberapa kali beberapa MB ada di sana, tapi saya pikir itu selalu mati ...
Arman
3
Dalam dunia situs web yang sukses, tidak responsif lebih buruk daripada rusak. Pengguna benar-benar akan menghargai kegagalan CEPAT (yang, kode frontend javascript Anda harus ditangani dengan baik), tetapi mereka akan BENCI Anda karena lambat. Parit swap, itu hanya menunda yang tak terhindarkan. -1
SpamapS
1
@Oli: Menjalankan N +1 tidak lagi membutuhkan megabucks, atau bahkan banyak uang. Bahkan hampir tidak membutuhkan keahlian khusus. Tidak dapat dihindari bahwa server akan turun karena sejumlah alasan, dan tidak sulit untuk mencegah hal ini menjadi masalah. Jika Anda memiliki server LAMP yang berdiri sendiri melakukan semuanya, maka apa yang lebih mahal; Menyiapkan dua lagi dan penyeimbang beban (pada EC2 dengan snapshot t1.micros dan EBS, ini bisa SANGAT murah), atau situs Anda menjadi sangat lambat pada hari terbesarnya? Periksa data dari google ... Saya pikir itu bit.ly/hB1AD1
SpamapS
1
Jawaban bagus, mencakup kasus server dunia nyata. Menambahkan perangkat keras yang berlebihan, LB, pemantauan, cache RAM, dll semuanya sangat penting, dan Anda akan memiliki waktu untuk mengatur dan men-debug mereka jika Anda tidak ingin melakukan kesalahan karena Anda murah di ruang swap.
ImaginaryRobots
4

Saya harus tidak setuju dengan adanya swap di server produksi.

Dalam pengalaman saya, swap disk rotasi membuat sistem Anda lebih mudah diprediksi dan lebih rentan terhadap kegagalan sistem secara keseluruhan. Server populer dengan beban tinggi yang melakukan apa pun dengan disk lambat lokal akan dengan cepat berubah menjadi sesuatu yang jauh lebih buruk daripada keadaan gagal. Waktu respons akan naik hingga 100x dari level normalnya, dan hal-hal sederhana seperti masuk melalui konsol atau ssh mungkin memerlukan waktu beberapa menit.

Pertukaran SSD adalah kasus khusus dan setidaknya akan menghapus waktu pencarian yang lambat yang biasanya membunuh sistem. Namun, menulis masih lambat, sehingga Anda akan tetap menunggu waktu yang sangat lama untuk pulih dari proses di luar kendali.

Tanpa swap, server LAMP Anda hanya akan mematikan proses untuk membebaskan RAM. Pemantauan yang tepat akan memberi tahu Anda mengenai hal ini, dan menghapus server dari produksi jika proses kritis dihilangkan. Kasus terburuk di sini adalah bahwa metode masuk Anda semuanya mati dan Anda harus melakukan siklus reset / daya yang keras. Kasus terburuk ini masih sama kemungkinannya dengan mesin swapping yang tidak terkendali, tetapi jauh lebih sulit untuk dideteksi.

Jika Anda menggunakan PHP, aktifkan batas memori, dan pantau log Anda atas kegagalannya. Ini sebuah trik, atur batas lebih rendah pada server dev Anda daripada dalam produksi. Jika Anda menggunakan mod_php di bawah apache, atur MaxRequestsPerChild menjadi beberapa ribu, sehingga httpd mati sebelum tumbuh terlalu besar seiring waktu. Yang terpenting, pantau penggunaan memori! Sering kali memori merayap seiring waktu, dan Anda hanya perlu me-restart layanan bocor secara berkala saat Anda men-debug masalah.

SpamapS
sumber
1
Terima kasih telah berbagi pengalaman Anda. Saya akuntansi dengan masalah yang sama, ketika ssh mengambil Inf. Saya hanya memaksa proses untuk memiliki memori terbatas, yang memungkinkan saya untuk menjalankan ssh dan memperbaiki skrip buggy.
Arman
Salah satu diskusi paling menarik tentang ruang swap dalam produksi yang saya lihat di internet. (seluruh utas, pro & kontra)
dpb
3

Swap space digunakan ketika sistem Anda memutuskan bahwa ia membutuhkan memori fisik untuk proses aktif dan ada cukup memori fisik yang tidak terpakai. Jika sistem membutuhkan lebih banyak sumber daya memori atau ruang, halaman tidak aktif dalam memori fisik kemudian dipindahkan ke ruang swap karena itu membebaskan memori fisik untuk penggunaan lain.

Situasi ini akan terjadi berkali-kali di server.

Sebuah). Skrip yang tidak dioptimalkan dapat menghabiskan banyak memori
b). Skrip seperti cadangan akan selalu menggunakan memori besar
c). lalu lintas padat

Jadi itu adalah praktik yang baik untuk memiliki ruang swap.

Detail lebih lanjut: https://help.ubuntu.com/community/SwapFaq

aneeshep
sumber
Terima kasih untuk penjelasannya Jika seseorang memiliki skrip kereta maka dalam hal apa pun Anda akan crash server, batas sistem harus mengontrol skrip Anda, bukan?
Arman
Selain itu, jika Anda bertukar selama lalu lintas yang padat, sistem Anda akan menjadi 100x lebih lambat dari biasanya. Itu umumnya tidak dapat diterima.
SpamapS
2

Menggunakan swap akan memberi Anda satu perlindungan tambahan terhadap ketidakstabilan server. Mungkin ada saat-saat ketika RAM hampir habis, dan pada server tanpa swap yang dapat menyebabkan crash yang lunak.

Saya mungkin dalam minoritas sekarang ketika saya mengatakan, masih masuk akal, seperti yang mereka rekomendasikan, memiliki swap dua kali lebih banyak daripada yang Anda miliki di memori utama. Bahkan pada sistem dengan 96GB RAM.

Tidak perlu banyak biaya dan, jika Anda membutuhkannya suatu hari, Anda akan senang mendapatkannya. Alasan untuk mengaktifkan swap hanyalah analisis biaya-manfaat yang sangat mudah. Lakukan! :-)

Stefano Palazzo
sumber
0

Saya ingin berterima kasih kepada Oli untuk jawaban yang indah - saya tahu lama -. Saya menemukan partisi adalah topik yang selalu hijau! Saya sangat setuju dengan baris tulisan Oli dan saya ingin membagikan skrip ini - tentu saja dapat ditingkatkan - saya gunakan untuk memantau penggunaan swap server saya.

Saya selalu mengkonfigurasi server dan layanan untuk beroperasi tanpa terjadinya swap sama sekali. Ketika itu akan, pastikan bahwa ada sesuatu yang salah, atau paling tidak, ada sesuatu yang melebihi rencana awal Anda.

Saya crontab skrip ini setiap setengah jam di lingkungan produksi. Ini akan mengirimkan saya pemberitahuan jika Tukar penggunaan! = 0k. Saya akan dapat segera menyelidiki / mengambil tindakan pada masalah ini, sebagian besar waktu, sebelum semuanya benar-benar salah .

Anda mengharapkan: bash, top, echo, awk, dan perintah mail yang berfungsi, tanpa melakukan pemeriksaan apa pun.

Semoga itu bisa membantu.

#!/bin/bash
CURRSWAP=$(top -b -n1 |grep Swap |awk '{print $4}')
ECOMM="echo $CURRSWAP means healthy, I wont take any action."
CURRDATE=$(date)
MAILDST="[email protected]"

case $CURRSWAP in
  [0]k) $ECOMM
        exit 0
        ;;
  *)    echo -e "Server: $HOSTNAME \n Date: $CURRDATE \n Current Swap partition usage: $CURRSWAP" | mail -s "Warning from $HOSTNAME" -- $MAILDST
        exit 0
        ;;
esac
exit 0
Marco
sumber