LINUX.ORG.RU
ФорумTalks

/хроники пикирующего истребителя/ Лучше - не значит быстрее

 ,


1

3

Случайно написал несколько скриптов на PHP. Вначале написал, а потом понял, что это PHP. Это зашквар, или один раз не считается?

А знаете, зачем прога на PHP?

Потому что я понаписал веб-интерфейсов на Java, и где-то там устроил утечку памяти. Теперь после процессинга определенного количества данных, вся память на серваке заканчивается, вместе со свопом. И процессор заканчивается, непойми почему.

Но юзеры сказали, что времени чинить нету. Поэтому стратегически был выделен сервер в 10 раз мощнее. Но и на нем память с процом тоже заканчиваются, но медленней.

Поэтому я сделал скрипты для юзера, чтобы когда прога начинает нереально тормозить в вебморде (это значит, она глубоко зарылась в своп), надо дернуть из браузера restart.php, который убьет и перезапустит докер с джава-софтиной на серваке. И еще tail-f.php чтобы посмотреть логи докера (понять, стартанул ли он, и если повис - то как именно).

Но у меня-то все работает, а любители хорошего кода так за год эту задачу и не решили - никаким способом.

★★★★☆

Последнее исправление: stevejobs (всего исправлений: 2)

Говнокод, который мы заслужили.

FiXer ★★☆☆☆
()

Но у меня-то все работает, а любители хорошего кода так за год эту задачу и не решили - никаким способом.

Эт какого хорошего, на джаве-то?

Bfgeshka ★★★★★
()

Это какой-то просто случай лютейшего говнокодинга. Прямо хрестоматийный пример.

Но у меня-то все работает, а любители хорошего кода так за год эту задачу и не решили - никаким способом.

Дык, так оно и бывает. Говнокод на говнокоде создаваемый ынтерпрайз-говнокодерами на протяжении десятилетий - как раз и приводит к тому, что в один прекрасный момент появляются такие вот баги, которые найти и устранить просто нереально, от слова совсем.

DawnCaster ★★
()

Ниасилил написать нормальный код. Взял php. Занавес.

Deleted
()

Но у меня-то все работает, а любители хорошего кода так за год эту задачу и не решили - никаким способом.

Вот так рассказывал-рассказывал о себе, и вдруг выяснилось, что ты-то не самый криворукий! Какие-то чистюли еще хуже.

tailgunner ★★★★★
()

Кстати, а докер ещё не научился в лимиты процессов (контейнеров) ? Или авто-рестарт по расписанию ? А то недавно видел краем глаза, что там есть какой-то swarm и даже распараллеливание запросов поддерживает - для веб сервиса самое то должно быть по-идее, и без костылей на PHP (т.к роль этих костылей сам докер выполняет)

DawnCaster ★★
()
Ответ на: комментарий от tailgunner

Я не криворукий! Там есть GC, он где-то в середине процесса начинает истошно визжать, что сборка мусора не дает результата =) Ну еще бы, там утечка явно. Если его вовремя не придушить специальным флагом, то он роняет виртуальную машину с предупреждением. Поэтому оно всегда запускается в придушенном режиме.

Такая приятная горка костылей, аж душа радуется. Каждый следующий костыль фиксит костыльность предыдущего костыля.

stevejobs ★★★★☆
() автор топика

Но у меня-то все работает, а любители хорошего кода так за год эту задачу и не решили - никаким способом

Я чот не понял, это ты так гордишься своим говённым костылём на пхп штоле? И типа правильные пацаны не такие уж правильные, ибо они так не могут?

Ну так не правильные же пацаны это текучее нечинябельное говнище написали.

WitcherGeralt ★★
()

Я правильно понимаю, что «нереальные тормоза» - критерий неформализуемый и автоматическим health check его отловить невозможно?

deadNightTiger ★★★★★
()
Ответ на: комментарий от stevejobs

Я не криворукий!

там утечка явно.

оно всегда запускается в придушенном режиме.

Такая приятная горка костылей, аж душа радуется.

Цитата Локи.

tailgunner ★★★★★
()
Ответ на: комментарий от DawnCaster

Кстати, а докер ещё не научился в лимиты процессов (контейнеров) ?

Давно умеет.

Или авто-рестарт по расписанию ?

cron на хосте.

KRoN73 ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Юзеры говорят, некогда чинить. К вечеру надо уже чтобы (их) работа была сделана. Значит, на фиксинг ну полчаса есть. Ошибка там может быть вообще в нативном коде, это не похоже на задачу на полчаса

stevejobs ★★★★☆
() автор топика

Потому что я понаписал веб-интерфейсов на Java, и где-то там устроил утечку памяти

Понятно. Spring, JPA, Hibernate, коллекции в Entity и «вот даже не знаю где мы почистить ссылку пролюбили».

Nastishka ★★★★★
()
Ответ на: комментарий от stevejobs

А как раньше работало? Ты обновление кривое выкатил? Если да, то надо было откатиться да и всё. Не бывает так, чтобы оно ни с того ни с сего начало течь.

В худшем случае я бы поставил перезапуск по крону и спокойно искал проблему.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 2)

Смеёмся и показываем на тебя пальцем

Harald ★★★★★
()

у меня-то все работает, а любители хорошего кода так за год эту задачу и не решили - никаким способом.

и вот все вот так... :(

Rastafarra ★★★★
()
Ответ на: комментарий от stevejobs

Лол. ССЗБ. Это какой-то срочный фриланс или адовое раздолбайство в проде?

WitcherGeralt ★★
()

Потому что я понаписал веб-интерфейсов на Java, и где-то там устроил утечку памяти. Теперь после процессинга определенного количества данных, вся память на серваке заканчивается, вместе со свопом. И процессор заканчивается, непойми почему.

Ну что же ты, почитал бы литературу (вот например на хабре автор постоянно про джаву рассказывает - https://habr.com/users/olegchir/) или видюшки посмотрел - https://youtube.com/c/javawatch . Поучился бы у умных людей, которые реально в теме, которые разбираются, которые как минимум бы нашли где их код на их волшебной яве протекает.

Но у меня-то все работает, а любители хорошего кода так за год эту задачу и не решили - никаким способом.

Иногда лучше ничего не делать, чем делать хрень.

micronekodesu ★★★
()

Вот поражает такое. Сам сейчас работаю в конторе которая сначала заменила python на erlang а потом на go потому что он видите ли быстрее. При этом вижу редкостную дичь... То види те ли python медленный при этом рассуждаем о алгоритмах O(1) и прочем. А у самих celery и reqwests в джангах....

demrnd
()
Ответ на: комментарий от demrnd

Лол. Как мне это знакомо. При этом - на собеседовании в таких конторах вытрахивают весь мозг своими хитров***анными задачками на O и на алгоритмы. При этом, когда устроился к ним, и видишь код, с которым они работают, наблюдаешь вот такое вот говно.

DawnCaster ★★
()
Последнее исправление: DawnCaster (всего исправлений: 1)
Ответ на: комментарий от Legioner

Надо еще понимать что в век докера об утечки узнают после убийства контейнера. А нет контейнера - нет ничего

demrnd
()

"Знатоки пыхоплеяды лепят гостевухи за доширак и заправляют картриджи."(С)

Так это же хорошо.

Больше жабабыдлокодерам бабла достанется.

Bioreactor ★★★★★
()

Что ж вы, товарищ, не пользуетесь правильными практиками программирования: сначала тест, потом код; парное программирование; микробенчмаркинг; функциональное тестирование перед запуском в продакшен и т.д.? Оно же в принципе не допускает подобного положения вещей, что у вас образовалось.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от iZEN

Еще как допускает. Вот мой issues к aiohttp пару месяцев не принимали. Есть ситуации когда нужно совпасть куче условий.

demrnd
()

Потому что я понаписал веб-интерфейсов на Java, и где-то там устроил утечку памяти.

Как так? Ты ж с конференций не вылезаешь, с гуру общаешься.. И на тебе, фейл! Помолись святому баруху, может снизойдёт на тебя знание.

Но юзеры сказали, что времени чинить нету. Поэтому стратегически был выделен сервер в 10 раз мощнее.

А надо было стратегических пиздюлей выделить.

З.Ы. А хотя, слишком толсто... Wait, OHSHI~!!!

Deleted
()
Ответ на: комментарий от demrnd

Всё - кирдык жабабыдлокодерам.

Только доширачники пых-пыхеры выживут.

Вот пруф - https://techrocks.ru/2018/07/17/compare-programmers-salary-in-moscow-kyiv-minsk/

PHP программист – от 30 до 100 тыс. рублей;
JAVA программист – от 120 до 200 тыс. рублей;
Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 1)

Омг, скрипт с вотчером, который снимает дамп аллокаций это для тебя рокетсайнс. А наговнякать автодрочилку докера - типа норма?

Deleted
()
Ответ на: комментарий от Bioreactor

Хз, я ничего не читал, как наша прога начала падать, сам разобрался, там ничего сложного, через jmap снимаешь дамп, через eclipse mat ковыряешься. У меня правда случай был стрёмный, дамп забивался сотнями тысяч объектов в очереди финализатора, т.к. финализатор вис в дедлоке (то бишь утечки как таковой не было, был гомнокод, в котором не закрыли Statement и commons dbcp в другом потоке таки решил его закрыть, а в JDBC всё там на synchronized, вот и вышел дедлок, который ещё, кстати, далеко не каждый день выходил). Но если случай простой, когда тупо в какой-нибудь там мапе копятся ссылки, то всё будет наглядно.

Legioner ★★★★★
()
Ответ на: комментарий от Deleted

А наговнякать автодрочилку докера - типа норма?

Вот, кстати, вопрос: нахера её писать, если докер сам может рестартить контейнеры, которые не алё? Просто кто-то в документацию не умеет.

Deleted
()
Ответ на: комментарий от Bioreactor

Да но пока на OpenJDK заводится сколько процентов? А суд с Гуглом вообще ставит всю затею под провал. Не зря Котлин пилят. Да и Гугл свой Го двигает. Пока инфраструктуры нет. Но с Java 11 есть ОЧЕНЬ плохая тенденция. Думаю народ с Java свалит. Стоит IBM и еще паре контор соскочить и все пойдет «по плану». Боюсь как бы C# на этом не вылетел вверх ибо та еще хрень...

demrnd
()
Ответ на: комментарий от Deleted

Там надо же делать heartbeat вроде, не? А судя по всему у них лютый овнокод и это написать никто не может.

Deleted
()
Ответ на: комментарий от Deleted

Какая, к чертям, автодрочилка? А если у юзера там что-то важное сейчас процессится, а в это время софтину убьёт этот импровизированный OOM? Да нет, пусть уж сам решает, насколько ему важно то, что у него сейчас процессится. Может быть, стоит подождать тормоза на последних 10%, но допроцессить данные до конца

Олсо, там утечка либо в инпут-аутпут-стримах и буферах, либо в нативном коде. Это может быть очень просто (где-то проворонил поставить try-with-resources), а может быть очень сложно (нужно где-то вызвать магическую функцию джавовой криптографии, которая обнулит какой-нибудь магический буфер). Если честно, я даже не стал смотреть код, потому что в худшем случае задача по отладке может занять очень долго, а времени нет

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

Олсо, там утечка либо в инпут-аутпут-стримах и буферах

Если у вас там настолько всё говнокодно, то это непознаваемое выносится в отдельный сервис. Сервис запускается менегером на таску, если жив, то на следуюшую и так пока не начнёт залипать, потом убивается менегром и т.п.

Deleted
()
Ответ на: комментарий от Deleted

ясно что у него это не новый проект... И ломаться он стал не сразу.

demrnd
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.