Apa yang dilakukan perintah sinkronisasi?

15

Saya tahu apa fungsinya ... Saya rasa saya ingin tahu mengapa ini memperbaiki masalah dalam aplikasi yang saya warisi. Saya mengambil alih aplikasi kucing jantan yang cukup besar yang bertindak sebagai server Red5 untuk sekelompok klien fleksibel, dan menangani banyak data interaksi real-time, yang akhirnya dibuang ke api rel. Masalahnya adalah di bawah banyak beban dari waktu ke waktu istirahat untuk klien ini tumbuh menjadi 3-400 ms di mana biasanya <100 ms. Klien menduga itu adalah masalah memori yang kami benar-benar tidak pernah bisa mengonfirmasi. Suatu hari server pementasan saya menjalankan tes beban pada bascially berhenti menerima permintaan atau sangat lambat. Atas kemauan saya mengirim

sync && echo 3 > /proc/sys/vm/drop_caches

dan secara ajaib server kembali hidup dan mulai berjalan dengan kecepatan penuh melayani koneksi ini. Apakah ini kebetulan atau apakah perilaku ini masuk akal dan mengapa?

j_mcnally
sumber
4
Itu adalah dua perintah. Yang mana yang memiliki efek yang Anda perhatikan?
Michael Hampton
linuxtidbits.wordpress.com/2008/02/20/purge-memory menyarankan untuk menjalankannya bersama-sama jadi saya tidak tahu.
j_mcnally
ini selanjutnya di refactored di sini: commandlinefu.com/commands/view/1026/…
j_mcnally
4
Sulit dikatakan. Anda tidak akan mengharapkan perintah-perintah ini untuk melakukan sesuatu yang bermanfaat di server kecuali jika itu telah salah paham. Tapi itu tentu saja tidak bisa dikesampingkan tanpa studi yang lebih cermat. Jika itu terjadi lagi, coba saja syncatau baru saja echo. Kemudian cobalah mencari tahu mengapa server lambat dalam kasus perbaikan ini (apakah CPU maks? Apakah IO maks? Apakah paging sistem?)
David Schwartz

Jawaban:

20

Setiap hard disk adalah perintah yang besarnya lebih lambat dari RAM Anda, jadi linux menggunakan RAM cadangan apa pun yang mungkin Anda miliki untuk menyimpan data sistem file cache. Namun, ini seharusnya tidak pernah menyebabkan masalah kinerja kecuali ada sesuatu yang salah dengan hard disk Anda, atau layanan di server Anda sedang mencoba untuk menulis data pada tingkat tinggi untuk waktu yang lama sehingga server tidak mungkin membuat cache atau mengambil data. Ini juga bisa menjadi tanda bahwa hard disk Anda mencapai akhir masa pakainya.

Bagaimanapun:

  • menjalankan man syncakan memberi tahu Anda apa yang disinkronkan [membersihkan buffer FS]
  • googling 'linux drop_caches' akan memberi tahu Anda bahwa menggemakan nomor 3 ke dalamnya akan melepaskan semua halaman memori yang tidak dibutuhkan dari cache [ini seharusnya tidak diperlukan pada sistem yang sehat]
  • command1 && command2 rusak menjadi 'jika command1 selesai dengan sukses maka jalankan command2'
    • mitra untuk ini adalah command1 || command2alias 'jika command1 gagal maka jalankan command2'

Perintah yang Anda berikan adalah perbaikan sementara yang terbaik dan merupakan gejala dari sesuatu yang salah dengan sistem Anda. Baik disk Anda sudah habis, atau sistem Anda terlalu lemah untuk apa yang Anda lakukan dengannya, atau keduanya .

Sammitch
sumber
terima kasih, saya tidak yakin, saya pikir ini adalah solusi jangka pendek. Saya kira saya ingin tahu mengapa ini bisa berhasil. Server ada di EC2 jadi tidak yakin tentang ide HD EOL.
j_mcnally
@ j_mcnally EC2? Kalau begitu, saya hanya bisa menebak seperti apa contoh khusus Anda, tapi itu mungkin kombinasi faktor-faktor seperti EBS yang sangat rapuh setiap saat, alokasi RAM yang kecil, dan tidak adanya partisi swap.
Sammitch
Jadi maksud Anda solusinya mungkin benar-benar valid?
j_mcnally
@j_mcnally sedihnya, jika Anda tidak berada di salah satu contoh dioptimalkan zillion dolar per bulan, berpotensi ya.
Sammitch
5

AWS bukan untuk yang pingsan, dan Anda hanya menemui salah satu alasan mengapa. Situasi I / O disk yang buruk pada AWS sudah terkenal, dan salah satu faktor utama yang perlu dipertimbangkan bagi siapa pun yang membangun aplikasi di atasnya. Ada beberapa instance yang dioptimalkan disk dan beberapa trik lainnya (seperti membuat RAID 0 dari volume EBS) yang dapat Anda coba untuk memperbaiki masalah. Pastikan untuk menggunakan instance yang lebih besar (setidaknya m1.large) untuk memastikan bahwa kernel dapat buffer I / O disk.

Joel E Salas
sumber
ya menggunakan m1.large. Server-server ini berputar untuk aplikasi dan kemudian dihancurkan berjam-jam kemudian ... jadi tidak yakin tentang investasi waktu dll, untuk disk io. Saya menghargai masukan semua orang dan saran seperti perbaikan mungkin benar bahkan jika tidak disukai. Terima kasih lagi.
j_mcnally