Це найкраща практика промисловості періодично перезапускати веб-сервери? [зачинено]


28

У нас є веб-додаток (розроблений третьою стороною), який працює на Tomcat. Ми отримали дуже низькі показники роботи програми. Розробник додатків стверджує, що це найкраща практика для галузі - перезавантажувати веб-сервери щовечора, звільняти від використання всієї пам'яті та починати спочатку.

З точки зору клієнта, що полегшує проблему збою сайту протягом дня, але з точки зору SysAdmin - це жахливе рішення.

Ми розміщуємо 20 таких додатків на різних серверах для різних клієнтів, і координація того, щоб перезапускати все щовечора, просто здається неправильним.


41
Скажіть їм, що розробники додатків - це найкраща практика для пошуку та виправлення витоків пам’яті.
Барт Сільверстрім

4
@Bart О, просто!
mfinni

1
+1 лише для того, щоб зробити свій день (PS: Я сам розробник)
RN.

1
Він сказав сервери чи послуги? Ми маємо програму tomcat, яка потребує того, щоб послуга перезапускалася щовечора. Якщо я цього не зроблю, в якийсь момент в майбутньому воно вийде з ладу. Я б краще цього не робив, але сервіс протягом дня важливіший.
Діжки

1
Отримайте деякий моніторинг файлів журналу та завантажте деякі інструменти моніторингу JVM. Якщо протягом дня вихід з ладу, ви можете побачити винятки або щось зареєстровано - навіть якщо вони є винятками за замовчуванням. Це дасть вам зрозуміти загальну сутність помилки. Крім того, дивіться використання JVM-пам'яті. Коефіцієнти справді хороші, у них витоку пам’яті, і ви їх зможете зафіксувати, якщо спостерігати за купою сервера JVM. Боротьба з поганим розвитком за допомогою хороших даних про системдмін. Це руйнує захист "ти просто не знаєш, що робиш" і змушує їх насправді відповідати, чому все заплуталося.
FloppyDisk

Відповіді:


29

Це, звичайно, не найкраща практика. Незважаючи на те , що це добре , щоб перезапустити сервери періодично просто щоб переконатися , що все йде правильно, необхідності перезавантаження щовечірні вказує на дуже серйозну витік пам'яті в додатку.


1
Це дуже хороший момент. Якщо ви ніколи не перезапускаєте сервери, як запропоновано нижче, ви можете не знати, що у вас є певні послуги, які не запускаються належним чином. Тоді, у випадку збою живлення / жорсткого перезавантаження, ваш сервер може не повернутися правильно.
einstiien

1
+1. Щомісяця може мати більше сенсу - не тільки для перезавантаження, але для звичайної операційної процедури для застосування патчів і т. Д. Я колись був членом команди адміністрування близько 1500 серверів, 24/7, і щомісяця проходило 3 ночі прокатки перезапуск "заплановано, і тоді всі патчі тощо будуть також розміщені на серверах. Це дає деяку стабільність планування та стандартну операційну процедуру.
TomTom

12

Існує різниця між "Найкращою практикою", тим, що багато людей роблять з поважних причин, та "Загальною практикою", тим, що багато хто робить, тому що вони ліниві та / або неосвічені.

Програми та (що ще гірше) сервери, які потрібно регулярно перезапускати або перезавантажувати, щоб продовжувати працювати, є досить поширеними. Але це також чітка ознака того, що у вас є критична помилка.

Здійснюючи SOP регулярно перезавантажувати програму, ваша компанія приховує серйозну помилку під килимом. Це невиправдано, клопа потрібно зіткнути і розім'яти, інакше він пізніше повернеться, щоб вкусити вас.

В ідеалі ваша компанія повинна знайти кращого розробника. На жаль, це може призвести до великої роботи, щоб переписати великі тракти вашого коду. Той факт, що розробник або вважає, що погано записаний код прийнятний, або недостатньо знає, щоб розпізнати симптоми помилкового коду, говорить про якість коду на низькому рівні. Хороший розробник буде конституційно нездатний залишити його в такому стані.

Зважаючи на те, що ви можете не в змозі замінити розробника, кілька пропозицій:

  • Подивіться, чи можна краще розробнику переглянути код і повідомити про свою оцінку тому, хто щось може зробити,
  • Погляньте на інструменти профілювання. Якщо у вас є навички та / або схильність, спробуйте самі профлігувати код, щоб знайти витік і повідомити про це.

Навіть не потрапляючи в інструменти для профілювання, орієнтовані на розробників, існує багато інструментів, орієнтованих на систематизм, для профілювання та моніторингу використання пам'яті в додатках Java. У будь-якому випадку вам слід налаштувати моніторинг пам'яті (особливо купи) на виробничих серверах. Я б рекомендував це, навіть якщо ви використовували код якості. Це може заздалегідь попередити, коли ваші програми-баггі збираються перевалитись.

Але ще краще, вони повинні допомогти вам зібрати докази того, що є витік, і навіть можуть вказати, де проблема в додатку. Це дасть вам кращі боєприпаси лобіювати його для фіксації.


2
Насправді, багато разів саме ця інфраструктура має помилку, а не код розробника. У нас не було жодних проблем із програмами J2EE, які періодично потрапляють у пекло сміттєзбірника на JBoss, але добре працюють на інших серверах додатків комерційної пошти. Тож це може бути не вина розробника, а навпаки, середовище розгортання.
рмалайтер

6

Розробник додатків, швидше за все, стверджує, що в його інтересах вам прикривати його попу, займаючись непрофесійною роботою, яку він робив. Він, мабуть, перестав визнати, що він щось написав із колосальним витоком пам’яті, але не дуже далеко від цього.


3

Багато відповідей тут, здається, відпадають від знаку практичних рішень. Вони, здається, відмовляються від догми - сервери ніколи не повинні бути перезапущені - чому ми маємо 5 дев'яток? відмовостійкість? Ну ось так, коли вони повинні бути, вони залишаються.

Крім того, заявити про причину поганих розробників або поганої практики розробки не йде в корені проблеми. Це може бути, але частіше за все його непоганий код програми. Ці питання вже вбудовані у більшу частину системного коду. Невеликі витоки пам’яті, проблеми з купою Java та пермген, якщо ви працюєте з невеликими додатками, як і ми. Сучасні сервери та програмне забезпечення, яким вони керують, дуже складні. Коли ви думаєте, що повинен робити такий сервер, як tomcat - обслуговувати файли, обробляти веб-запити, мережеві комунікації, комунікації бази даних тощо, це робить багато. У цьому стопці є хек багато рухомих деталей.

Активне перезавантаження серверів дозволяє сказати, що раз на тиждень чи місяць, на мій погляд, є розумним та ефективним. Якщо ви кластеризовані та обертаєте сервери, ви не повинні впливати на клієнтів ні на один біт. Клієнти будуть набагато щасливішими від роботи ваших серверів.


2

Сервери IMO повинні бути вимкнені якомога менше. Швидше за все, розробник додатків побудував зухвалий додаток із витоком пам’яті.


Абсолютно - я думаю, що ОП повинен сказати комусь, що їм потрібно, щоб знайти кращого розробника.
Гельвік

2
Існує причина, що великі компанії платять великі гроші за кілька дев'яти разів, і чому компанії витрачають тисячі на надлишкові джерела живлення, RAID, клітки гарячої заміни тощо, і це, звичайно, не так, що їм потрібно перезавантажувати лише раз на день.
Барт Сільверстрім

1

Я щовечора перезапускаю один із наших веб-серверів, але це більше через погано написаний додаток Java, а не галузевий стандарт. Я б сказав, що не рідкість перезапускати веб-сервіси. Це може зробити очищення пам'яті, яке ви шукаєте, і зменшити навантаження на сервер порівняно з повним перезапуском.


1

Переважно ніколи не слід перезапускати сервер . Це одна з причин, чому ми маємо відмову . Якщо вам доведеться перезапустити сервер через ваші програми, то ваші додатки просочуються пам'яттю і погано побудовані.

Я раніше працював з Tomcat, і у мене була така ж проблема, наступного разу, коли я буду працювати з контейнером Java, я шукатиму ще одного, можливо, JBoss або GlassFish.

Редагувати: Якщо вам доведеться перезавантажувати її щовечора, вам, ймовірно, доведеться перезапускати її частіше, якщо / коли навантаження збільшується. Не забудьте мати надійні програми, це найкраще рішення.


4
Я не думаю, що я згоден, коли ти кажеш, що сервер ніколи не повинен перезапускатися. Щоб застосувати виправлення безпеки, слід перезапустити сервери. Їх ніколи не потрібно перезапускати для речей, окрім запланованого технічного обслуговування.
Зоредаче

Це правда, що деякі сервери повинні бути перезапущені, щоб застосувати виправлення безпеки. Але якщо у вас досить хороша система, то вам не доведеться перезавантажувати систему. Існують системи, які працюють рік у рік. Ви повинні прагнути до високої доступності, якщо ви обслуговуєте послугу в Інтернеті. Якщо у вас є система відмов, як кластер, ви можете знімати вузли по одному та оновлювати їх, коли служба все ще працює.
Йонас

1
Якщо у вас є лише один сервер та / або апаратне забезпечення, немає такої речі, як висока доступність. Ви робите це неправильно, якщо ви дали лише один сервер, і ваша служба настільки критична, що він не може терпіти 15 хвилин простою щоразу і знову для перезавантаження сервера. Якщо у вас є програма "нульового простою", то у вас буде справжня система HA з кількома вузлами. У цьому випадку періодична перезавантаження для патчів тощо - це досить просто, як ви вказали.
EEAA

1
"Наступного разу ... я буду шукати інший [контейнер Java, окрім Tomcat]". Я б не звинувачував Tomcat. Я впродовж багатьох років працюю над виробничими послугами, і кожен раз, коли у мене виникли ці проблеми, це виявилося проблемою додатків. "Обов'язково мати надійні програми, це найкраще рішення". Як не дивно, кожен інший сервер додатків Java, який я використовував до цього часу, відчуває подібні проблеми, коли я запускаю на ньому пропускний код. Однак, Tomcat 7 повинен мати деяке проактивне виявлення витоку пам'яті.
Кіеф

0

Найчастіший, що я бачив, - це щотижня. Де я зараз перебуваю в магазині вікон, і ми робимо це щомісяця у вихідні дні після Патч-вівторка.


Коли я почав працювати в одному місці, я виявив, що вони вночі перезавантажуються на місці ... Це було жахливо, тим більше, що сервер мав приблизно 1-2% шансу не повернутися назад правильно (помилка в драйвері жорсткого диска ). Знадобився певний час, щоб виправити "причини" для перезавантаження. Добре витрачений час.
Брайан Ноблеуч,

0

Хоча я погоджуюся, що не ідеально постійно перезавантажувати сервер, є ситуації, коли це не є виною розробника, ані неправильним. У нас є добре сприйнятий додаток, який просочує пам'ять через проблеми в бібліотеці Python Popen. Це стара програма, яка незабаром буде звільнена, але важлива для бізнесу. Ми повинні тримати це з мінімальним суєтою для наших клієнтів. Тому ми щойно вирішили перезапускати сервер щовечора.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.