
Tim
03.10.2018
08:54:44
поцоны, чем пользуетесь при поиске мемори ликов?

Vasiliy
03.10.2018
08:56:46
Я юзал патченый руби и профайлер

Tim
03.10.2018
08:57:17
https://github.com/SamSaffron/memory_profiler ?
а что за патченый руби

Google

Vasiliy
03.10.2018
09:00:34
Я чёт другое юзал

Tim
03.10.2018
09:01:36
вообще мне кажется на это даже тесты можно было бы писать, типа
before = Profiler.megabytes
do_something
invoke_gc
after = Profiler.megabytes
expect(after).to be less_than before

Vasiliy
03.10.2018
09:01:58
https://github.com/ruby-prof/ruby-prof/blob/master/README.rdoc
Там и про патчинг рубей
Вот как раз оттуда kcachegrid какой то юзал
Я думаю тебе мемори профайлер не поможет, он удобен когда тебе надо сравнить две реализации по памяти, а приложение чёт хз как данные собирать

Tim
03.10.2018
09:08:03
ну идея такая что если есть мемори лик, то памяти будет больше жраться даже если запустить гц

Vasiliy
03.10.2018
09:09:02
ну смотри
чтобы найти мемори лик надо метод запускать много раз
иначе после 1 запуска у тебя могут остаться данные какие-то аллоцированные, но при втором запуске они высвободятся и снова остануться после использования твоей ф-ции
чтобы понять утечка это или нет, надо запустить несколько раз функцию и смотреть идёт ли высвобождение или накопление данных

Google

Vasiliy
03.10.2018
09:12:09
это раз
два - ты не ебеешь как вызывается gc в рубях
(ну точнее ты читал что он есть, что ЯП работает так что его вызывает, но точно не знаешь когда и как)

Tim
03.10.2018
09:14:11
http://ruby-doc.org/core-2.2.0/GC.html#method-c-start
типа как я понял тут можно полный гц запустить

Vasiliy
03.10.2018
09:16:44
ты вот думаешь ты вызвал GC и всё? птички поют, память пустая, если бы всё так просто было, не было бы боли с памятью

Tim
03.10.2018
09:17:45

Vasiliy
03.10.2018
09:18:51
если интересно как работает память в рубях, вот https://www.schneems.com/2015/05/11/how-ruby-uses-memory.html
ну и если ты руками вызываешь GC то ты явно что-то делаешь не так

Tim
03.10.2018
09:20:07
ну в целях тестирования

Vasiliy
03.10.2018
09:20:13
и утечка собственно происходит именно когда GC не может высвободить память

Tim
03.10.2018
09:21:59
да, поэтому есть смысл посмотреть увеличилось ли количество используемой памяти после гц и функции по сравнению с до функции

Vasiliy
03.10.2018
09:23:06
а ты уверен что GC удалит данные твоей функции?

Tim
03.10.2018
09:24:45
ну да, в этом проблема. Но > (full_mark: true, immediate_sweep: true) утверждают что да

Vasiliy
03.10.2018
09:33:16
ну кароч я думаю в тестах такое юзать - хуета получится

Tim
03.10.2018
09:33:36
вполне возможно
но имхо мемори лик это такая штука которую в потенциале можно тестить
типа тесты подтверждают что-то, в большинстве случаев, что что-то работает. бывает, что подтверждают, что какой-то баг с прода не возникает (в принципе тоже относится к первой категории)
нет смысла тесты писать, которые могут давать фолс позитив, то есть баг на проде будет, а тесты будут проходить

Vasiliy
03.10.2018
09:36:44

Google

Roman
03.10.2018
09:37:46
я понимаю, что это немного нелогично, но думай об этом как "сработали алярмы тестов"

Tim
03.10.2018
09:38:40
ок, тогда фолс негатив
ну как с таймаутом бдшки, о чем я спрашивал на so и где мне про такое рассказали

Roman
03.10.2018
09:39:35

Vasiliy
03.10.2018
09:45:35
ну да, но винят в этом сайдкик
лол
заменили один ЯП на другой, переписали воркеры - ТЕК САЙДКИК

Roman
03.10.2018
10:33:23
аххаха
ну и как обычно путают memory leak с memory bloat
ну так это ваш код, библиотеки, которые вы используете
сайдкик уже давно заявляет, что в нем утечек нет, и повода усомниться в этом пока не было

Alex
03.10.2018
11:39:26
Я больше скажу, кто сказал что в реальном коде гц сам очистку запустит?

Tim
03.10.2018
11:43:34
ну если это тест, гипотетически
retained memory by location
-----------------------------------
45024 /Users/<username>/.rvm/gems/ruby-2.4.0/gems/newrelic_rpm-5.0.0.342/lib/new_relic/collection_helper.rb:41
when String then String.new(object) # convert string subclasses to strings
ХММММММ

Nikita
03.10.2018
12:01:12

Alex
03.10.2018
12:01:36
почему нет?

Nikita
03.10.2018
12:01:45
redirect_to account_path && return unless ... работать отказывается

Google

Alex
03.10.2018
12:01:59
а вот с set_variables хер поймешь что происходит
видел код который довел это все до абсурда

Roman
03.10.2018
12:02:06
А чего не if else

Nikita
03.10.2018
12:02:06
Вот надо чтобы не вызывалась

Roman
03.10.2018
12:02:28
Строчки экономишь?

Nikita
03.10.2018
12:02:37
Рубокоп ругаться будет

Roman
03.10.2018
12:02:49
Мде
Можно коллбэком еще

Василий
03.10.2018
12:03:34
Замени на and

Alex
03.10.2018
12:03:42

Василий
03.10.2018
12:03:46
У and ниже приоритет чем у &&

Alexander
03.10.2018
12:03:49

Nikita
03.10.2018
12:03:53
Вот с and работает, да. Но рубокоп тоже против

Василий
03.10.2018
12:04:21

Vasiliy
03.10.2018
12:10:17
Я б иф лучше б вьебал
Не люблю unless

Nikita
03.10.2018
12:11:07

Alex
03.10.2018
12:11:25

Google

Vasiliy
03.10.2018
12:11:52
да впизду, второе условие добавляется и ебешь голову с && или ||
только вот вроде редирект у тебя всегда выполняться будет

Nikita
03.10.2018
12:12:36
Щаз проверим

Max
03.10.2018
12:12:48
Проверять не надо

Tim
03.10.2018
12:13:04

Max
03.10.2018
12:13:20
Было же нормально написано, стало вообще непонятно

Nikita
03.10.2018
12:13:21
Нет, работает нормас вроде

Tim
03.10.2018
12:13:35
имхо unless норм юзать ток в однострочниках
с одним условием

Vasiliy
03.10.2018
12:14:08
сделал бы
if !shop.fb_page_id?
redirect ...
return
end
your code...

Max
03.10.2018
12:14:25
return redirect unless shop.fb_page_id?

Vasiliy
03.10.2018
12:14:52
ну или да, ретурн редирект

Alex
03.10.2018
12:14:55
иногда бывает нет противоположного оператора
типо blank/present

Max
03.10.2018
12:15:42
у меня вообще плохо с unless, всегда барахлить мозг начинает, когда встречаю