Web sunucularını düzenli aralıklarla yeniden başlatmak en iyi endüstri uygulaması mıdır? [kapalı]


28

Tomcat'ta çalışan bir web uygulamamız var (üçüncü taraflarca geliştirilen). Uygulamadan çok kötü bir performans elde ettik. Uygulama geliştiricisi, web sunucularını her gece yeniden başlatmanın, tüm bellek kullanımlarını serbest bırakmanın ve baştan başlamanın Endüstri İçin En İyi Uygulama olduğunu iddia ediyor.

Sitenin gün içindeki çökmesini hafifleten müşteri perspektifinden, ancak SysAdmin açısından bakıldığında çok kötü bir çözüm.

Bu uygulamalardan 20'sini farklı istemciler için farklı sunucularda barındırıyoruz ve her gece yeniden başlatıldığından emin olmanın koordinasyonu yanlış görünüyor.


41
Uygulama geliştiricilerinin bellek sızıntılarını bulup düzeltmeleri için Endüstri En İyi Uygulaması olduğunu söyleyin.
Bart Silverstrim

4
@Bart Ah çırpıda !!
mfinni

1
+1 sadece günümü kazandığım için (PS: Ben bir geliştiriciyim)
RN.

1
Sunucu veya servis mi dedi? Her gece yeniden başlatılması gereken servise ihtiyaç duyan bir tomcat uygulaması alıyoruz. Yapmazsam, gelecekte bir noktada çökecek. Bunu yapmamayı tercih ederim, ancak gün içinde hizmet daha önemlidir.
küvetler

1
Bazı günlük dosya izleme işlemlerini gerçekleştirin ve bazı JVM izleme araçlarını indirin. Gün boyunca bir şeyler kilitleniyorsa, istisnalar veya günlüğe kaydedilen bir şey görmelisiniz - varsayılan istisnalar olsalar bile. Bu size hatanın genel doğası hakkında bazı bilgiler verecektir. Ayrıca, JVM hafıza kullanımını izleyin. Olasılıklar gerçekten iyidir, bellek sızıntısı vardır ve eğer sunucuyu JVM yığınını izlerseniz yakalarsınız. İyi sysadmin verileriyle kötü gelişme ile mücadele edin. “Ne yaptığını bilmiyorsun” savunmasını yok eder ve olayların neden dağıldıkları için cevap vermelerini sağlar.
FloppyDisk,

Yanıtlar:


29

Bu kesinlikle en iyi uygulama değil. Sunucunuzu düzenli aralıklarla yeniden başlatmak iyi olsa da , her şeyin doğru şekilde yapıldığından emin olmak için, gece yeniden başlatmaya ihtiyaç duyulması, uygulamada çok ciddi bir bellek sızıntısı olduğuna işaret eder.


1
Bu çok iyi bir nokta. Sunucularınızı aşağıda önerildiği şekilde yeniden başlatmazsanız, doğru şekilde başlamamış belirli hizmetlerin olduğunu bilmiyor olabilirsiniz. Ardından, elektrik kesintisi / donanımın yeniden başlatılması durumunda sunucunuz tekrar geri gelmeyebilir.
einstiien

1
+1. Aylık daha anlamlı olabilir - yalnızca yeniden başlatma için değil, yamaları uygulama vb. İçin normal bir işlem prosedürü için. yeniden başlatıldı "zamanlanmış, bu noktada tüm yamalar vs. sunuculara da konacak. Bu, bazı planlama kararlılıkları ve standart bir işletim prosedürü sunar.
TomTom

12

"En İyi Uygulama", birçok insanın iyi nedenlerle yaptığı şeyler ile "Ortak Uygulama", birçok insanın tembel ve / veya cahil oldukları için yaptıkları arasında bir fark vardır.

Rutin olarak yeniden veya iyi çalışmasını sağlamak için yeniden başlatılması gereken uygulamalar ve (kötü) sunucuları olan oldukça yaygın. Ama aynı zamanda kritik bir hatanın olduğuna dair net bir gösterge.

Bir uygulamayı düzenli olarak yeniden başlatmasını SOP yaparak, şirketiniz halının altında ciddi bir hata saklıyor. Bu affedilmez, böceğin yüzü aşağı bakıp ezilmesi gerekiyor, yoksa sonradan seni ısırmaya başlayacak.

İdeal olarak, şirketiniz daha iyi bir geliştirici bulmalıdır. Ne yazık ki, bu kodunuzun büyük izlerini yeniden yazmak için oldukça fazla çalışmaya neden olabilir. Geliştiricinin ya kötü yazılmış kodun kabul edilebilir olduğunu düşündüğü ya da buggy kodunun belirtilerini tanıyacak kadar bilgi sahibi olmadığı gerçeği, kodun kalitesinin düşük olduğunu gösterir. İyi bir geliştirici, anayasal olarak onu bu durumda bırakmaktan aciz olacaktır.

Geliştiriciyi değiştirebilecek konumda olamayacağınıza göre, birkaç öneri:

  • Daha iyi bir geliştiricinin kodu gözden geçirip geçirmediğini ve değerlendirmelerini bu konuda bir şeyler yapabilecek birine rapor edip edemediğini görün.
  • Profil oluşturma araçlarına bir göz atın. Becerilere ve / veya eğime sahipseniz, sızıntıyı bulmak ve bildirmek için kodu kendiniz belirlemeyi deneyin.

Geliştirici odaklı profil oluşturma araçlarına girmeden bile, Java uygulamalarında bellek kullanımını profilleme ve izleme için bol miktarda sysadmin odaklı araç vardır. Her durumda üretim sunucularınızdaki belleğin (özellikle de yığının) izlenmesini gerçekten sağlamalısınız. Kalite kodunu kullanıyor olsanız bile bunu tavsiye ederim. Buggy uygulamalarınız devrilmek üzereyken size önceden uyarı verebilir.

Ancak daha iyisi, bunlar bir sızıntının olduğuna dair kanıt toplamanıza yardımcı olmalı ve sorunun uygulamada nerede olduğunu gösterebilir. Bu, düzeltilmesi için size lobide daha iyi mühimmat sağlayacaktır.


2
Aslında, çoğu zaman geliştirici kodunu değil, böceğe sahip olan altyapıdır. JBoss'ta çöp toplama cehenneme giren, ancak diğer ticari uygulama sunucularında iyi çalışan J2EE uygulamaları ile ilgili herhangi bir sorun yaşamadık. Bu nedenle geliştiricinin hatası olmayabilir, bunun yerine dağıtım ortamı olabilir.
rmalayter

6

Uygulama geliştiricisi, yaptığı profesyonel olmayan iş çevresinde çalışarak kıçını korumanın sizin için en iyi çıkar olduğunu iddia etmesinin daha muhtemel olduğunu düşünüyor. Aslında, o, kısa bir hafıza sızıntısı olan bir şey yazdığını, ancak çok kısa olmayan bir şeyi yazdığını kabul etmekten vazgeçmiş olabilir.


3

Buradaki birçok cevap pratik çözümlerin işaretinden düşmektedir. Dogma'dan kaçıyorlar gibi görünüyor - sunucular asla yeniden başlatılmamalıdır - neden 5 tane dokuzumuz var? hataya dayanıklılık? Evet, bu yüzden kalkmaları gerekiyorsa, ayakta kalıyorlar.

Ayrıca, kötü geliştiricilerin nedenini açıklamak ya da kötü gelişme pratiği, sorunun kaynağına gitmez. Kötü olmayan uygulama kodu değil ama daha sık olabilir. Bu konular zaten sistem kodunun çoğunda bulunmaktadır. Bizim yaptığımız gibi birçok küçük uygulama kullanıyorsanız, küçük bellek sızıntıları, Java yığını ve permgen sorunları. Modern sunucular ve çalıştırdıkları yazılımlar çok karmaşık. Tomcat gibi bir sunucunun ne yapması gerektiğini düşündüğünüzde - dosya sunun, web isteklerini işleme, ağ iletişimi, veritabanı iletişimi vb. O yığının içinde bir sürü hareketli parça var.

Proaktif olarak bilgisayarları yeniden başlatmak, haftada veya ayda bir kez görüşüme göre akıllı ve verimli olduğunu söyler. Kümelenmişseniz ve sunucuları döndürüyorsanız, istemcileri bir bit etkilememelisiniz. Müşterileriniz sunucularınızın performansıyla daha mutlu olacaklar.


2

IMO Sunucuları mümkün olduğunca az kapatılmalıdır. Uygulama Geliştiricisinin bellek sızıntısı olan kaliteli bir uygulama oluşturması daha olasıdır.


Kesinlikle - OP'nin daha iyi bir geliştirici bulmak için ihtiyaç duydukları birine söylemesi gerektiğini düşünüyorum.
Helvick

2
Büyük şirketlerin birden fazla çalışma süresi için büyük paralar ödemesi ve şirketlerin binlerce yedekli güç kaynakları, RAID, çalışırken değiştirilebilir kafesler vb. İçin neden harcadığının bir nedeni var.
Bart Silverstrim

1

Her gece web sunucularımızdan birini yeniden başlattığım bir senaryo var ama bunun nedeni endüstri standardı yerine zayıf yazılmış bir java uygulaması. Yine de web servislerini yeniden başlatmanın nadir olmadığını söyleyebilirim. Bu, tam olarak yeniden başlatmaya kıyasla aradığınız belleği temizleyebilir ve sunucuya daha az zorlanma getirebilir.


1

Bir sunucu tercihen hiçbir zaman yeniden başlatılmamalıdır. Hata toleransımızın sebeplerinden biri de bu . Sunucunuzu uygulamalarınız nedeniyle yeniden başlatmanız gerekiyorsa, uygulamalarınız bellek sızdırıyor ve hatalı bir şekilde oluşturuluyor.

Daha önce Tomcat ile çalışıyorum ve aynı problemi yaşadım, bir dahaki sefere bir Java konteyneriyle çalışacağım başka bir tane daha arayacağım, belki JBoss veya GlassFish.

Düzenleme: Şimdi her gece yeniden başlatmanız gerekiyorsa, yük arttığında / arttığında muhtemelen daha sık yeniden başlatmanız gerekir. Sağlam uygulamalara sahip olduğunuzdan emin olun, bu en iyi çözümdür.


4
Bir sunucunun asla yeniden başlatılmaması gerektiğini söylerken kabul ettiğimi sanmıyorum. Güvenlik düzeltmelerini uygulamak için sunucular yeniden başlatılmalıdır. Ancak planlanan bakımdan başka şeyler için asla yeniden başlatılmaları gerekmez.
Zoredache,

Güvenlik düzeltmelerini uygulamak için bazı sunucuların yeniden başlatılması gerektiği doğrudur. Ancak, yeterince iyi bir sisteminiz varsa, sistemi yeniden başlatmanız gerekmez. Her yıl çalışan sistemler var. İnternet üzerinden bir hizmet veriyorsanız, Yüksek Kullanılabilirlik hedeflemelisiniz. Küme gibi hataya dayanıklı bir sisteminiz varsa, hizmet devam ederken düğümleri birer birer indirebilir ve güncelleyebilirsiniz.
Jonas,

1
Yalnızca tek bir sunucunuz ve / veya donanım parçanız varsa, Yüksek Kullanılabilirlik diye bir şey yoktur. Yalnızca bir sunucuya vermişseniz ve hizmetiniz o kadar kritiktir ki, sunucuyu yeniden başlatmak için şimdi ve tekrar 15 dakika boyunca çalışmamaya tahammül edemezsiniz. "Sıfır kesinti süresi" uygulamasına sahipseniz , çoklu düğümlere sahip gerçek bir HA sisteminiz olacaktır . Bu durumda, yamalar vb. İçin periyodik olarak yeniden başlatmak, belirttiğiniz gibi oldukça kolaydır.
AÇAA,

1
"Bir dahaki sefere ... Başka bir [Tomcat dışında Java konteyner] arayacağım". Tomcat'i suçlamazdım. Yıllardır üretim hizmetleri üzerinde çalışıyorum ve bu sorunu her yaşadığımda bunun bir uygulama sorunu olduğu ortaya çıktı. "Sağlam uygulamalara sahip olduğunuzdan emin olun, bu en iyi çözüm" Tam olarak. Yeterince komik, şimdiye kadar kullandığım diğer Java uygulama sunucularının üzerinde sızdıran kod çalıştırdığımda da benzer sorunlar yaşıyor. Bununla birlikte, Tomcat 7'nin bir tür proaktif bellek sızıntısı tespitine sahip olması gerekiyordu.
Kief

0

Şimdiye kadar gördüğüm en sık haftalık. Şu an olduğum yer biz bir pencereliyiz ve bunu Salı günü izleyen hafta sonu boyunca aylık olarak yapıyoruz.


Bir yerde çalışmaya başladığımda, her gece yeniden yerleştirildiklerini fark ettim ... Bu korkunçtu, özellikle de sunucunun geri gelmeme ihtimalinin yaklaşık% 1-2 olduğu için (sabit sürücü sürücüsündeki zamanlama hatası) ). Yeniden başlatmalar için "nedenleri" düzeltmek biraz zaman aldı. İyi geçirilmiş zaman.
Brian Knoblauch,

0

Bir sunucuyu sürekli olarak yeniden başlatmanın ideal olmadığı konusunda hemfikir olmama rağmen, geliştiricinin hatası ya da yapılacak yanlış şeyin olmadığı durumlar vardır. Python Popen kütüphanesindeki sorunlardan dolayı hafızayı sızdıran iyi niyetli bir uygulamamız var. Yakında emekli olacak eski bir uygulamadır, ancak iş için kritik öneme sahiptir. Müşterilerimiz için en az telaş ile çalışmaya devam etmeliyiz. Bu yüzden sunucuyu her gece yeniden başlatmaya karar verdik.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.