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.
Jawaban:
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.
sumber
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:
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.
sumber
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.
sumber
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.
sumber
Server IMO harus dimatikan sesedikit mungkin. Sepertinya Pengembang Aplikasi membuat aplikasi jelek dengan kebocoran memori.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber