เป็นวิธีปฏิบัติที่ดีที่สุดในอุตสาหกรรมในการรีสตาร์ทเว็บเซิร์ฟเวอร์เป็นระยะ [ปิด]


28

เรามีเว็บแอปพลิเคชั่น (พัฒนาโดยบุคคลที่สาม) ที่ทำงานบน Tomcat เราได้รับประสิทธิภาพที่แย่มากจากแอปพลิเคชัน นักพัฒนาแอปพลิเคชันอ้างว่าเป็นแนวปฏิบัติที่ดีที่สุดในอุตสาหกรรมในการรีสตาร์ทเว็บเซิร์ฟเวอร์ทุกคืนเพื่อเพิ่มการใช้หน่วยความจำทั้งหมดและเริ่มต้นใหม่

จากมุมมองของลูกค้าที่บรรเทาปัญหาไซต์ล้มเหลวระหว่างวัน แต่จากมุมมอง SysAdmin มันเป็นโซลูชันที่น่ากลัว

เราโฮสต์ 20 แอปพลิเคชันเหล่านี้ในเซิร์ฟเวอร์ที่แตกต่างกันสำหรับลูกค้าที่แตกต่างกันและการประสานงานเพื่อให้แน่ใจว่าทุกคนจะถูกรีสตาร์ททุกคืนดูเหมือนว่าผิด


41
บอกพวกเขาว่านี่เป็นแนวปฏิบัติที่ดีที่สุดในอุตสาหกรรมสำหรับนักพัฒนาแอปพลิเคชันในการค้นหาและแก้ไขการรั่วไหลของหน่วยความจำ
Bart Silverstrim

4
@Bart Oh snap !!
mfinni

1
+1 เพียงเพื่อทำให้วันของฉัน (PS: ฉันเป็นนักพัฒนาตัวเอง)
RN

1
เขาพูดว่าเซิร์ฟเวอร์หรือบริการหรือไม่? เรามีแอพพลิเคชั่น Tomcat ที่ต้องการบริการรีสตาร์ททุกคืน ถ้าฉันไม่ทำมันในบางจุดในอนาคตมันจะพัง ฉันไม่อยากทำ แต่บริการในระหว่างวันมีความสำคัญมากกว่า
Tubs

1
รับการตรวจสอบไฟล์บันทึกการทำงานและดาวน์โหลดเครื่องมือการตรวจสอบ JVM หากสิ่งต่าง ๆ ขัดข้องระหว่างวันคุณควรเห็นข้อยกเว้นหรือสิ่งที่บันทึกไว้ - แม้ว่าจะเป็นข้อยกเว้นเริ่มต้นก็ตาม ที่จะให้คุณเข้าใจถึงลักษณะทั่วไปของข้อผิดพลาด รวมทั้งดูการใช้หน่วยความจำ JVM อัตราต่อรองที่ดีจริงๆพวกเขามีหน่วยความจำรั่วและคุณจะจับมันถ้าคุณดูกองเซิร์ฟเวอร์ JVM ต่อสู้กับการพัฒนาที่ไม่ดีด้วยข้อมูลดูแลระบบที่ดี มันทำลายการป้องกัน "คุณแค่ไม่รู้ว่าคุณกำลังทำอะไรอยู่" และทำให้พวกเขาต้องตอบว่าทำไมสิ่งต่าง ๆ เกิดขึ้น
FloppyDisk

คำตอบ:


29

นี่ไม่ใช่วิธีปฏิบัติที่ดีที่สุดอย่างแน่นอน ในขณะที่เป็นการดีที่จะรีสตาร์ทเซิร์ฟเวอร์ของคุณเป็นระยะเพื่อให้แน่ใจว่าทุกอย่างเกิดขึ้นอย่างถูกต้อง


1
นี่เป็นจุดที่ดีมาก หากคุณไม่รีสตาร์ทเซิร์ฟเวอร์ตามที่แนะนำด้านล่างคุณอาจไม่ทราบว่าคุณมีบริการบางอย่างที่ไม่เริ่มต้นอย่างถูกต้อง จากนั้นในกรณีที่ไฟฟ้าขัดข้อง / รีสตาร์ทเซิร์ฟเวอร์ของคุณอาจไม่กลับมาทำงานอีก
einstiien

1
+1 รายเดือนอาจเข้าท่ามากขึ้น - ไม่เพียง แต่สำหรับการรีสตาร์ท แต่สำหรับขั้นตอนการดำเนินงานตามปกติเพื่อนำไปใช้งานแพตช์ ฯลฯ ฉันเคยเป็นส่วนหนึ่งของทีมผู้ดูแลระบบสำหรับเซิร์ฟเวอร์ประมาณ 1,500 แห่ง, 24/7 และทุกเดือน รีสตาร์ท "ตามกำหนดเวลาซึ่งจะมีการวางแพตช์ทั้งหมดและอื่น ๆ ลงในเซิร์ฟเวอร์เช่นกัน นี่แสดงให้เห็นถึงความมั่นคงในการวางแผนและขั้นตอนการปฏิบัติงานมาตรฐาน
TomTom

12

มีความแตกต่างระหว่าง "วิธีปฏิบัติที่ดีที่สุด" สิ่งที่หลายคนทำเพื่อเหตุผลที่ดีและ "วิธีปฏิบัติทั่วไป" สิ่งต่าง ๆ ที่หลายคนทำเพราะขี้เกียจและ / หรือไม่รู้

แอปพลิเคชันและเซิร์ฟเวอร์ (แย่กว่า) ที่ต้องรีสตาร์ทหรือรีบูตเป็นประจำเพื่อให้ทำงานได้ดีเป็นเรื่องปกติ แต่ก็เป็นข้อบ่งชี้ที่ชัดเจนว่าคุณมีข้อบกพร่องร้ายแรง

ด้วยการทำให้ SOP เริ่มต้นแอปพลิเคชันใหม่เป็นประจำ บริษัท ของคุณกำลังซ่อนข้อบกพร่องร้ายแรงไว้ใต้พรม นี่คืออภัยไม่ได้ข้อผิดพลาดจะต้องเผชิญและแบนหรือจะกลับมากัดคุณในภายหลัง

บริษัท ของคุณควรหานักพัฒนาที่ดีกว่า น่าเสียดายที่นี่อาจนำไปสู่การทำงานค่อนข้างมากในการเขียนโค้ดขนาดใหญ่ของคุณอีกครั้ง ความจริงที่ว่าผู้พัฒนาคิดว่าโค้ดที่เขียนไม่ดีนั้นเป็นที่ยอมรับหรือไม่รู้จักพอที่จะรับรู้ถึงอาการของรหัสบั๊กกี้ได้บ่งบอกว่าคุณภาพของโค้ดนั้นต่ำ นักพัฒนาที่ดีจะไม่สามารถทิ้งมันไว้ในความลับ

เนื่องจากคุณอาจไม่สามารถแทนที่นักพัฒนาได้คำแนะนำเล็กน้อย:

  • ดูว่าคุณสามารถมีนักพัฒนาซอฟต์แวร์ที่ดีกว่าตรวจสอบรหัสและรายงานการประเมินของพวกเขากับคนที่สามารถทำอะไรกับมันได้หรือไม่
  • มีลักษณะเป็นเครื่องมือทำโปรไฟล์ หากคุณมีทักษะและ / หรือความชอบลองทำรหัสด้วยตนเองเพื่อค้นหารอยรั่วและรายงาน

แม้ว่าจะไม่ได้ใช้เครื่องมือการทำโปรไฟล์ที่มุ่งเน้นนักพัฒนา แต่ก็มีเครื่องมือดูแลระบบจำนวนมากสำหรับการทำโปรไฟล์และการตรวจสอบการใช้งานหน่วยความจำในแอปพลิเคชัน Java คุณควรตั้งค่าการตรวจสอบหน่วยความจำ (โดยเฉพาะอย่างยิ่งกอง) บนเซิร์ฟเวอร์ที่ใช้งานจริงของคุณไม่ว่าในกรณีใด ฉันจะแนะนำสิ่งนี้แม้ว่าคุณจะใช้รหัสคุณภาพ มันอาจให้คำเตือนล่วงหน้าเมื่อแอพที่บักกี้ของคุณกำลังจะโค่นล้ม

แต่ยังดีกว่าสิ่งเหล่านี้จะช่วยให้คุณรวบรวมหลักฐานว่ามีการรั่วไหลและอาจบ่งบอกถึงปัญหาที่อยู่ในแอปพลิเคชัน สิ่งนี้จะช่วยให้คุณได้กระสุนที่ดีขึ้นเพื่อให้มันได้รับการแก้ไข


2
จริงๆแล้วหลายครั้งเป็นโครงสร้างพื้นฐานที่มีข้อผิดพลาดไม่ใช่รหัสของผู้พัฒนา เราไม่มีปัญหากับแอพพลิเคชั่น J2EE ที่เข้าสู่คอลเลกชันขยะเป็นระยะบน JBoss แต่ทำงานได้ดีบนแอปพลิเคชันเซิร์ฟเวอร์เชิงพาณิชย์อื่น ๆ ดังนั้นอาจไม่ใช่ความผิดของนักพัฒนา แต่เป็นสภาพแวดล้อมการปรับใช้
rmalayter

6

นักพัฒนาแอปพลิเคชันมีแนวโน้มที่จะอ้างว่าเป็นประโยชน์สูงสุดของเขาในการที่จะครอบคลุมตูดของเขาด้วยการหลีกเลี่ยงงานที่ไม่เป็นมืออาชีพที่เขาทำ เขาอาจหยุดพูดสั้น ๆ ว่ายอมรับว่าเขาเขียนอะไรบางอย่างที่มีหน่วยความจำรั่วไหล แต่ไม่สั้นมาก


3

คำตอบมากมายที่นี่ดูเหมือนจะหลุดไปจากเครื่องหมายของการแก้ปัญหาในทางปฏิบัติ ดูเหมือนว่าพวกเขาจะหลีกเลี่ยงความเชื่อ - เซิร์ฟเวอร์ไม่ควรรีสตาร์ท - ทำไมเราถึงมี 5 เก้า ยอมรับความผิด? ถ้าอย่างนั้นพวกเขาควรจะขึ้นพวกเขาอยู่

นอกจากนี้เพื่อระบุสาเหตุของการพัฒนาที่ไม่ดีหรือการพัฒนาที่ไม่ดีไม่ได้ไปที่รากของปัญหา อาจเป็นได้ แต่บ่อยครั้งมากกว่ารหัสแอปพลิเคชันที่ไม่เลว ปัญหาเหล่านี้มีอยู่แล้วในรหัสของระบบ หน่วยความจำรั่วไหลน้อย, Java heap และ permgen มีปัญหาหากคุณใช้งานแอพขนาดเล็กเช่นเดียวกับที่เราทำ เซิร์ฟเวอร์สมัยใหม่และซอฟต์แวร์ที่ใช้ทำงานนั้นซับซ้อนมาก เมื่อคุณนึกถึงสิ่งที่เซิร์ฟเวอร์อย่าง tomcat ต้องทำ - ให้บริการไฟล์ดำเนินการตามคำขอของเว็บการสื่อสารบนเครือข่ายการสื่อสารกับฐานข้อมูลและอื่น ๆ ในกองนั้นมีชิ้นส่วนที่เคลื่อนไหวมากมาย

การรีบู๊ตเซิร์ฟเวอร์เชิงรุกช่วยบอกว่าสัปดาห์ละครั้งหรือหนึ่งเดือนนั้นฉลาดและมีประสิทธิภาพในมุมมองของฉัน หากคุณทำคลัสเตอร์และคุณหมุนเซิร์ฟเวอร์คุณจะไม่ส่งผลกระทบต่อไคลเอ็นต์หนึ่งบิต ลูกค้าจะมีความสุขมากขึ้นกับประสิทธิภาพของเซิร์ฟเวอร์ของคุณ


2

เซิร์ฟเวอร์ IMO ควรปิดตัวลงให้น้อยที่สุด เป็นไปได้ว่า App Developer จะสร้างแอปพลิเคชั่นที่มีคุณภาพต่ำ


อย่างแน่นอน - ฉันคิดว่า OP ต้องการบอกใครสักคนว่าพวกเขาต้องการค้นหานักพัฒนาที่ดีกว่า
Helvick

2
มีเหตุผลที่ บริษัท ใหญ่จ่ายเงินจำนวนมากสำหรับช่วงเวลาที่หลากหลายและทำไม บริษัท จึงใช้เงินเป็นพันเพื่อจ่ายไฟสำรอง, RAID, กรงแลกเปลี่ยนความร้อน ฯลฯ และแน่นอนว่าไม่ใช่เพื่อให้พวกเขาต้องรีบูตวันละครั้งเท่านั้น
Bart Silverstrim

1

ฉันมีสคริปต์รีสตาร์ทหนึ่งใน webservers ของเราทุกคืน แต่นั่นเป็นเพราะโปรแกรม java ที่เขียนไม่ดีมากกว่ามาตรฐานอุตสาหกรรม ฉันจะบอกว่ามันไม่ใช่เรื่องแปลกที่จะเริ่มบริการเว็บใหม่ นี่อาจเป็นการล้างหน่วยความจำที่คุณกำลังค้นหาและทำให้เครียดน้อยลงเมื่อเปรียบเทียบกับการรีสตาร์ทแบบเต็ม


1

เซิร์ฟเวอร์ควรอย่างยิ่งไม่ต้องเริ่มต้นใหม่ นั่นเป็นหนึ่งในเหตุผลที่ว่าทำไมเรามีความอดทนความผิด หากคุณต้องรีสตาร์ทเซิร์ฟเวอร์เนื่องจากแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะมีหน่วยความจำรั่วและสร้างขึ้นมาไม่ดี

ฉันเคยทำงานกับ Tomcat มาก่อนและฉันมีปัญหาเดียวกันในครั้งต่อไปที่ฉันจะทำงานกับคอนเทนเนอร์ Java ฉันจะค้นหาอีกอันหนึ่งอาจจะเป็น JBoss หรือ GlassFish

แก้ไข:หากคุณต้องรีสตาร์ททุกคืนในตอนนี้คุณอาจต้องรีสตาร์ทบ่อยขึ้นหาก / เมื่อโหลดเพิ่มขึ้น ตรวจสอบให้แน่ใจว่ามีแอปพลิเคชั่นที่มั่นคงนั่นเป็นทางออกที่ดีที่สุด


4
ฉันไม่คิดว่าฉันเห็นด้วยเมื่อคุณบอกว่าไม่ควรรีสตาร์ทเซิร์ฟเวอร์ เซิร์ฟเวอร์ควรเริ่มต้นใหม่เพื่อใช้การแก้ไขด้านความปลอดภัย พวกเขาไม่จำเป็นต้องเริ่มต้นใหม่สำหรับสิ่งอื่น ๆ จากนั้นวางแผนการบำรุงรักษา
Zoredache

เป็นความจริงที่ต้องมีการรีสตาร์ทเซิร์ฟเวอร์บางเครื่องเพื่อใช้การแก้ไขด้านความปลอดภัย แต่ถ้าคุณมีระบบที่ดีพอคุณไม่จำเป็นต้องรีสตาร์ทระบบ มันมีระบบที่ใช้ปีแล้วปีเล่า คุณควรตั้งเป้าหมายให้มีความพร้อมใช้งานสูงหากคุณให้บริการบนอินเทอร์เน็ต หากคุณมีระบบป้องกันข้อผิดพลาดเช่นคลัสเตอร์คุณสามารถลบโหนดทีละตัวและอัปเดตเมื่อบริการยังคงทำงานอยู่
Jonas

1
หากคุณมีเพียงเซิร์ฟเวอร์เดียวและ / หรือชิ้นส่วนของฮาร์ดแวร์ไม่มีสิ่งใดที่มีความพร้อมใช้งานสูง คุณทำผิดถ้าคุณให้เซิร์ฟเวอร์เพียงเครื่องเดียวเท่านั้นและบริการของคุณสำคัญอย่างยิ่งที่จะไม่สามารถทนต่อการหยุดทำงานได้ 15 นาทีทุก ๆ ครั้งเพื่อรีสตาร์ทเซิร์ฟเวอร์ หากคุณมีแอปพลิเคชั่น "zero downtime" คุณจะมีระบบ HA จริงที่มีหลายโหนด ในกรณีนี้การรีบูตเป็นระยะ ๆ สำหรับแพตช์ ฯลฯ นั้นค่อนข้างง่าย
EEAA

1
"ครั้งต่อไป ... ฉันจะมองหา [Java container อื่นที่ไม่ใช่ Tomcat]" ฉันจะไม่ตำหนิ Tomcat ฉันใช้บริการด้านการผลิตมาหลายปีแล้วและทุกครั้งที่ฉันมีปัญหานี้ก็กลายเป็นปัญหาเกี่ยวกับแอปพลิเคชัน "ต้องแน่ใจว่ามีแอพพลิเคชั่นที่มั่นคงนั่นเป็นทางออกที่ดีที่สุด" แน่นอน สนุกมากพอที่แอปพลิเคชั่น Java เซิร์ฟเวอร์อื่น ๆ ทุกตัวที่ฉันเคยใช้ประสบปัญหาคล้ายกันเมื่อฉันเรียกใช้โค้ดที่รั่ว ที่กล่าวว่า Tomcat 7 ควรจะมีการตรวจจับการรั่วไหลของหน่วยความจำเชิงรุกบางประเภท
Kief

0

บ่อยที่สุดที่ฉันเคยเห็นคือรายสัปดาห์ ที่ฉันอยู่ตอนนี้เราเป็นร้านค้าหน้าต่างและเราทำรายเดือนในช่วงสุดสัปดาห์หลังจาก Patch วันอังคาร


เมื่อฉันเริ่มทำงานในสถานที่แห่งหนึ่งฉันพบว่าพวกเขามีการรีบูตทุกคืนในสถานที่ ... มันน่ากลัวโดยเฉพาะอย่างยิ่งเนื่องจากเซิร์ฟเวอร์มีโอกาส 1-2% ที่จะไม่กลับมาถูกต้อง (ข้อผิดพลาดเวลาในไดรเวอร์ฮาร์ดไดรฟ์ ) ใช้เวลาในการแก้ไข "สาเหตุ" สำหรับการรีบูต เวลาที่ใช้ไป
Brian Knoblauch

0

ในขณะที่ฉันยอมรับมันไม่เหมาะที่จะรีสตาร์ทเซิร์ฟเวอร์อย่างต่อเนื่อง แต่มีบางสถานการณ์ที่ไม่ใช่ความผิดของผู้พัฒนาหรือสิ่งผิดปกติที่ต้องทำ เรามีแอพพลิเคชั่นที่ทำงานได้ดีที่มีการรั่วไหลของหน่วยความจำเนื่องจากปัญหาในไลบรารี Python Popen มันเป็นแอปพลิเคชั่นเก่าที่จะถูกยกเลิกในเร็ว ๆ นี้ แต่มันสำคัญกับธุรกิจ เราต้องทำให้มันทำงานด้วยความยุ่งยากน้อยที่สุดสำหรับลูกค้าของเรา ดังนั้นเราเพิ่งตัดสินใจรีสตาร์ทเซิร์ฟเวอร์ทุกคืน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.