Apakah ini praktik Industri Terbaik untuk me-restart server web secara berkala? [Tutup]

28

Kami memiliki aplikasi web (yang dikembangkan oleh pihak ketiga) yang berjalan di Tomcat. Kami mendapatkan kinerja yang sangat buruk dari aplikasi. Pengembang aplikasi mengklaim bahwa ini adalah Praktek Terbaik Industri untuk memulai kembali server web setiap malam, untuk membebaskan semua penggunaan memori dan memulai kembali.

Dari perspektif pelanggan yang meringankan masalah mereka tentang crash situs pada siang hari, tetapi dari perspektif SysAdmin itu adalah solusi yang mengerikan.

Kami meng-host 20 aplikasi ini di server yang berbeda untuk klien yang berbeda, dan koordinasi untuk memastikan bahwa semua sedang di-restart setiap malam sepertinya salah.

Geo
sumber
41
Beri tahu mereka bahwa Praktik Terbaik Industri bagi pengembang aplikasi untuk menemukan dan memperbaiki kebocoran memori mereka.
Bart Silverstrim
4
@Bart Oh snap !!
mfinni
1
+1 hanya untuk membuat hari saya (PS: Saya sendiri pengembang)
RN.
1
Apakah dia mengatakan server atau layanan? Kami memiliki aplikasi kucing jantan yang membutuhkan layanan restart setiap malam. Jika saya tidak melakukannya, di beberapa titik di masa depan itu akan crash. Saya lebih suka tidak melakukannya, tetapi layanan pada siang hari lebih penting.
Bak
1
Dapatkan beberapa pemantauan file log dan unduh beberapa alat pemantauan JVM. Jika barang mogok di siang hari, Anda akan melihat pengecualian atau sesuatu sedang dicatat - bahkan jika itu adalah pengecualian default. Itu akan memberi Anda wawasan tentang sifat umum kesalahan. Juga, perhatikan penggunaan memori JVM. Peluangnya sangat bagus karena ada kebocoran memori dan Anda akan menangkapnya jika Anda melihat tumpukan server JVM. Memerangi perkembangan yang buruk dengan data sysadmin yang baik. Ini menghancurkan pertahanan "Anda tidak tahu apa yang Anda lakukan" dan membuat mereka benar-benar harus menjawab mengapa hal-hal kacau.
FloppyDisk

Jawaban:

29

Ini tentu bukan praktik terbaik. Sementara itu adalah baik untuk me-restart server Anda secara berkala hanya untuk memastikan bahwa segala sesuatu datang dengan benar, perlu restart poin malam untuk kebocoran memori yang sangat serius dalam aplikasi.

EEAA
sumber
1
Ini adalah poin yang sangat bagus. Jika Anda tidak pernah memulai ulang server seperti yang disarankan di bawah ini, Anda mungkin tidak tahu bahwa Anda memiliki layanan tertentu yang tidak memulai dengan benar. Kemudian, jika terjadi kegagalan daya / restart keras server Anda mungkin tidak kembali dengan benar.
einstiien
1
+1. Bulanan mungkin lebih masuk akal - tidak hanya untuk memulai kembali, tetapi untuk prosedur operasi normal untuk menerapkan tambalan dll. Saya pernah menjadi bagian dari tim admin untuk sekitar 1500 server, 24/7, dan setiap bulan ada 3 malam "pemutaran restart "terjadwal, pada titik mana semua patch dll akan dimasukkan ke server juga. Ini memberikan stabilitas perencanaan dan prosedur operasi standar.
TomTom
12

Ada perbedaan antara "Praktik Terbaik", hal-hal yang dilakukan banyak orang dengan alasan yang baik, dan "Praktik Biasa", hal-hal yang dilakukan banyak orang karena mereka malas dan / atau bodoh.

Aplikasi dan server (yang lebih buruk) yang perlu dinyalakan ulang atau di-boot ulang secara rutin agar tetap berjalan dengan baik adalah hal biasa. Tapi itu juga indikasi yang jelas bahwa Anda memiliki bug kritis.

Dengan membuatnya SOP untuk memulai kembali aplikasi secara teratur, perusahaan Anda menyembunyikan bug serius di bawah karpet. Ini tidak bisa dimaafkan, bug harus dihadap ke bawah dan tergencet, atau akan kembali menggigit Anda nanti.

Idealnya, perusahaan Anda harus menemukan pengembang yang lebih baik. Sayangnya, ini mungkin menyebabkan banyak pekerjaan untuk menulis ulang traktat besar kode Anda. Fakta bahwa pengembang berpikir bahwa kode yang ditulis dengan buruk dapat diterima, atau tidak cukup tahu untuk mengenali gejala kode kereta, menunjukkan kualitas kode tersebut rendah. Pengembang yang baik secara konstitusional tidak mampu meninggalkannya di negara itu.

Karena Anda mungkin tidak berada dalam posisi untuk menggantikan pengembang, beberapa saran:

  • Lihat apakah Anda dapat meminta pengembang yang lebih baik meninjau kode dan melaporkan penilaian mereka kepada seseorang yang dapat melakukan sesuatu tentang hal itu,
  • Lihat alat profiling. Jika Anda memiliki keterampilan dan / atau kecenderungan, cobalah membuat profil kode sendiri untuk menemukan kebocoran dan melaporkannya.

Bahkan tanpa masuk ke alat profiling berorientasi pengembang, ada banyak alat berorientasi sysadmin untuk profil dan memantau penggunaan memori pada aplikasi Java. Anda harus benar-benar mengatur pemantauan memori (terutama tumpukan) pada server produksi Anda dalam hal apa pun. Saya akan merekomendasikan ini bahkan jika Anda menjalankan kode kualitas. Ini mungkin memberi Anda peringatan terlebih dahulu saat aplikasi kereta Anda akan tumbang.

Tetapi lebih baik lagi, ini akan membantu Anda untuk mengumpulkan bukti bahwa ada kebocoran, dan bahkan dapat menunjukkan di mana masalah tersebut ada dalam aplikasi. Ini akan memberi Anda amunisi yang lebih baik untuk melobi agar diperbaiki.

Kemalasan
sumber
2
Sebenarnya, banyak kali infrastruktur yang memiliki bug, dan bukan kode pengembang. Kami tidak memiliki masalah dengan aplikasi J2EE yang masuk ke neraka pengumpulan sampah secara berkala di JBoss tetapi berfungsi dengan baik di server aplikasi komersial lainnya. Jadi itu mungkin bukan kesalahan pengembang, melainkan lingkungan penyebaran.
rmalayter
6

Pengembang aplikasi kemungkinan besar mengklaim bahwa itu adalah kepentingannya sendiri terbaik bagi Anda untuk menutupi pantatnya dengan bekerja di sekitar pekerjaan tidak profesional yang dia lakukan. Dia mungkin berhenti benar-benar mengakui bahwa dia menulis sesuatu dengan kebocoran memori kekalahan, tetapi tidak terlalu jauh dari itu.

Maximus Minimus
sumber
3

Banyak jawaban di sini tampaknya jauh dari solusi praktis. Mereka tampaknya menghindari dogma - server tidak boleh di-restart - mengapa kita memiliki 5 sembilan? toleransi kesalahan? Nah itulah yang jadi ketika mereka seharusnya bangun mereka begadang.

Juga, untuk menyatakan penyebabnya pengembang yang buruk atau praktik pengembangan yang buruk tidak masuk ke akar masalah. Ini bisa tetapi lebih sering daripada tidak itu kode aplikasi yang tidak buruk. Masalah-masalah ini sudah dibangun ke banyak kode sistem. Kebocoran memori kecil, masalah Java heap dan permgen jika Anda menjalankan banyak aplikasi kecil seperti kami. Server modern dan perangkat lunak yang mereka jalankan sangat kompleks. Ketika Anda memikirkan apa yang harus dilakukan oleh server seperti tomcat - melayani file, memproses permintaan web, komunikasi jaringan, komunikasi basis data, dll., Ini sangat bermanfaat. DI tumpukan itu ada banyak bagian yang bergerak.

Mem-boot ulang server secara proaktif katakanlah seminggu sekali atau sebulan cerdas dan efisien menurut saya. Jika Anda berkerumun dan memutar server, Anda tidak boleh memengaruhi klien sedikit pun. Klien akan jauh lebih bahagia dengan kinerja server Anda.

Claude
sumber
2

Server IMO harus dimatikan sesedikit mungkin. Sepertinya Pengembang Aplikasi membuat aplikasi jelek dengan kebocoran memori.

matpie
sumber
Tentu saja - saya pikir OP perlu memberitahu seseorang bahwa mereka perlu menemukan pengembang yang lebih baik.
Helvick
2
Ada alasan mengapa perusahaan besar membayar mahal untuk beberapa kali uptime dan mengapa perusahaan menghabiskan ribuan untuk suplai daya yang berlebihan, RAID, kandang swap panas, dll., Dan tentu saja tidak demikian sehingga mereka hanya perlu reboot sekali sehari.
Bart Silverstrim
1

Saya memiliki skrip restart salah satu server web kami setiap malam tapi itu lebih karena aplikasi java yang ditulis dengan buruk daripada standar industri. Saya akan mengatakan bahwa itu tidak biasa untuk me-restart layanan web. Ini mungkin melakukan pembersihan memori yang Anda cari dan mengurangi ketegangan pada server dibandingkan dengan restart penuh.

einstiien
sumber
1

Sebaiknya server tidak pernah di -restart. Itulah salah satu alasan mengapa kita memiliki toleransi kesalahan . Jika Anda harus me-restart server Anda karena aplikasi Anda, maka aplikasi Anda bocor memori dan dibangun dengan buruk.

Saya telah bekerja dengan Tomcat sebelumnya, dan saya memiliki masalah yang sama, lain kali saya akan bekerja dengan wadah Java saya akan mencari yang lain, mungkin JBoss atau GlassFish.

Sunting: Jika Anda harus me-restart setiap malam sekarang, maka Anda mungkin harus me-restart lebih sering jika / ketika beban meningkat. Pastikan untuk memiliki aplikasi yang solid, itu solusi terbaik.

Jonas
sumber
4
Saya rasa saya tidak setuju ketika Anda mengatakan server tidak boleh di-restart. Server harus direstart untuk menerapkan perbaikan keamanan. Mereka seharusnya tidak perlu direstart untuk hal-hal lain selain pemeliharaan terencana.
Zoredache
Memang benar bahwa beberapa server harus direstart untuk menerapkan perbaikan keamanan. Tetapi jika Anda memiliki sistem yang cukup baik, maka Anda tidak perlu me-restart sistem. Ada sistem yang berjalan dari tahun ke tahun. Anda harus mencari Ketersediaan Tinggi jika Anda melayani layanan di Internet. Jika Anda memiliki sistem toleran kesalahan seperti cluster, Anda bisa mencatat node satu per satu dan memperbaruinya, ketika layanan masih berjalan.
Jonas
1
Jika Anda hanya memiliki satu server dan / atau perangkat keras, tidak ada Ketersediaan Tinggi. Anda melakukan kesalahan jika Anda hanya memberikan satu server dan layanan Anda sangat penting sehingga tidak dapat mentolerir downtime 15 menit setiap sekarang dan lagi untuk me-restart server. Jika Anda memiliki aplikasi "zero downtime", maka Anda akan memiliki sistem HA sejati dengan banyak node. Dalam hal ini, me-reboot secara berkala untuk patch, dll cukup mudah seperti yang Anda tunjukkan.
EEAA
1
"Lain kali ... Saya akan mencari [wadah Java lain selain Tomcat]". Saya tidak akan menyalahkan Tomcat. Saya telah menjalankan layanan produksi selama bertahun-tahun, dan setiap kali saya mengalami masalah ini ternyata menjadi masalah aplikasi. "Pastikan untuk memiliki aplikasi yang solid, itu solusi terbaik" Tepat. Lucunya, setiap server aplikasi Java lain yang saya gunakan sejauh ini mengalami masalah serupa ketika saya menjalankan kode bocor di atasnya. Yang mengatakan, Tomcat 7 seharusnya memiliki semacam deteksi kebocoran memori proaktif.
Kief
0

Yang paling sering saya lihat adalah mingguan. Di mana saya sekarang kami toko jendela, dan kami melakukannya setiap bulan selama akhir pekan setelah Patch Selasa.

Joel Coel
sumber
Ketika saya mulai bekerja di satu tempat, saya menemukan bahwa mereka memiliki reboot malam di tempat ... Itu mengerikan, terutama karena server memiliki peluang sekitar 1-2% untuk tidak kembali dengan benar (bug waktu pada driver hard drive ). Butuh waktu untuk memperbaiki "penyebab" untuk reboot. Waktu BAIK dihabiskan.
Brian Knoblauch
0

Meskipun saya setuju itu tidak ideal untuk me-restart server terus-menerus, ada situasi di mana itu bukan kesalahan pengembang atau hal yang salah untuk dilakukan. Kami memiliki aplikasi berperilaku baik yang membocorkan memori karena masalah di pustaka Python Popen. Ini adalah aplikasi lama yang akan segera dihentikan, tetapi ini penting untuk bisnis. Kita harus membuatnya tetap berjalan dengan sedikit keributan untuk klien kami. Jadi kami baru saja memutuskan untuk me-restart server setiap malam.

Nick Mellor
sumber