LINUX.ORG.RU

Просмотр памяти процесса \ Найти строку в памяти

 ,


0

2

У меня есть nodejs-скрипт, запущенный около месяца и он в один момент начал «течь» (rss ~ 6GB). Хочу понять что там за данные накопились в нем. Возможно какой то массив\объект растет или ещё что-то.

Вытащил (gdb --pid 343 ... dump memory...) для начала через GDB сырые данные запущеного процесса в папку.

Что теперь с ними делать не понимаю. Погрепал эти файлы, ничего от этого не получил.

Каким образом код в скрипте трансформируется в память, в байты\биты?

Например есть в коде

class Abc{
  constructor() {
     this.prop = "abc"
  }
}


Можно ли потом в памяти найти строку «abc»?

★★★★

Всё это зависит от огромного количества нюансов. Даже в, казалось бы, тривиальном случае строк, далеко не факт что ты сможешь увидеть свою строку в ожидаемом виде. Движок интерпретируемого языка легко может хрранить строки (да и всё остальное) в каком-то своём формате. Например строки можно хранить в UTF-32. Просто ради удобства. Я видел системы, которые целочисленные значения хранили во float по каким-то своим внутренним соображениям.

В общем тебе нужен дебаггер\профайлер именно для твоего языка. Запускай через них и разбирайся.

Usruser
()

Вытащил (gdb --pid 343 ... dump memory...) для начала через GDB сырые данные запущеного процесса в папку.

Зачем? Есть специализированные тузлы для V8, которые показывают какие у тебя там массивы/объекты аллоцированны. Смысл ковырять сишным дебагером? Ты свой код отлаживаешь или v8?

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