
Egor
15.08.2018
13:08:34

Alexey
15.08.2018
13:48:09
можно ли как-нибудь проверить свою программу на работу в условиях очень малого доступного объема ОЗУ на linux x86_64? Объем RAM может быть килобайты (стек + куча).
Ну и вообще, как-нибудь точно мониторить сколько ОЗУ требуется проге.
Или лучше сразу куда-нибудь в эмулятор залезть?

Stanislav
15.08.2018
13:50:00

Alexey
15.08.2018
13:50:19
речь идет не про систему целиком, а конкретное приложение в ней

Google

Egor
15.08.2018
13:50:23

Alexey
15.08.2018
13:50:27
так то памяти десятки гигабайт.

Юра Незнанов
15.08.2018
13:50:47

Alexey
15.08.2018
13:50:48

Юра Незнанов
15.08.2018
13:50:54
в вижл студии классный очень даже

Alexey
15.08.2018
13:51:07

Egor
15.08.2018
13:51:09

Юра Незнанов
15.08.2018
13:51:29
но это все в винде

Alexey
15.08.2018
13:51:53
виндов не имею

Egor
15.08.2018
13:51:56
если функция ещё и будет не отрабатывать, как заявлено, то зачем такое программирование

Юра Незнанов
15.08.2018
13:52:15

Egor
15.08.2018
13:53:26

Google

Alexey
15.08.2018
13:54:38

Egor
15.08.2018
13:55:11
не пользовался много, знаю в основном только про валгринд

Stolyarchuk
15.08.2018
13:55:37
можно руками через cgroups

Max
15.08.2018
13:56:38

Alexey
15.08.2018
13:57:24
эти лимиты, кстати, довольно зыбкие на самом деле, как я понимаю. в том плане, что в linux же лениво реальная память выделяется. поэтому после new int[100500] памяти будет выделено примерно нуль. До тех пор пока по этой памяти прога не пройдется и странички не потрогает.
Если ограничить же адресное пространство (виртуальную память) каким-нибудь мелким значением, то прога не взлетит вовсе, ибо не сможет либы загрузить/свой исполняемый файл в память отобразить.

Никита
15.08.2018
13:57:34
https://habr.com/company/oleg-bunin/blog/340394/

Kirill
15.08.2018
13:57:57

Alexey
15.08.2018
13:58:54
Спасибо всем. Буду щупать ?

Egor
15.08.2018
14:01:33
эти лимиты, кстати, довольно зыбкие на самом деле, как я понимаю. в том плане, что в linux же лениво реальная память выделяется. поэтому после new int[100500] памяти будет выделено примерно нуль. До тех пор пока по этой памяти прога не пройдется и странички не потрогает.
Если ограничить же адресное пространство (виртуальную память) каким-нибудь мелким значением, то прога не взлетит вовсе, ибо не сможет либы загрузить/свой исполняемый файл в память отобразить.
если 10 программ напишут new[1GB], когда в системе только 1GB, то остальные 9 получат ошибку. Память у нас не при использовании будет крашится, а при выделении, соответственно подсчёт должен быть тоже в той точке

Alexey
15.08.2018
14:02:51

Egor
15.08.2018
14:03:07
откуда сомнения?

Alexey
15.08.2018
14:03:27
отсюда: https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

Egor
15.08.2018
14:03:51
если я запрашиваю, то ожидаю, что выделят при наличии свободной памяти

Igor
15.08.2018
14:03:57

Alexey
15.08.2018
14:03:59
и из личного опыта

Egor
15.08.2018
14:04:14
возможно, не сталкивался

Alexey
15.08.2018
14:04:16

Max
15.08.2018
14:04:47

Google

Max
15.08.2018
14:05:20

Stolyarchuk
15.08.2018
14:05:42
new аллоцирует в разделяемой.. туда плюсуется ещё и своп

Alexey
15.08.2018
14:05:53

Stolyarchuk
15.08.2018
14:06:37
наверно

Max
15.08.2018
14:09:12
Другое дело, что new должен ещё и конструкторы вызвать, т.е. обращение должно быть сразу.

Egor
15.08.2018
14:09:50
какой сигнал?
segv?

Max
15.08.2018
14:10:20

Alexey
15.08.2018
14:10:56

Max
15.08.2018
14:11:12

Alexey
15.08.2018
14:15:16

Max
15.08.2018
14:17:03
а не vagrant?
нее. Vagrant - это ж для управления виртуальными машинами )

Stolyarchuk
15.08.2018
14:17:22

Alexey
15.08.2018
14:17:22
просто в хабрастетье про вагрант пишут. может очепятка конечно

Max
15.08.2018
14:22:40

Stolyarchuk
15.08.2018
14:24:46
у меня везде vm.overcommit_memory = 0 по дефолту
наверно незря

Max
15.08.2018
14:25:05

Google

Max
15.08.2018
14:25:37

Stolyarchuk
15.08.2018
14:26:43
ткрите носом, плз.. где вы эти констатнты смотрите? не в исходниках же ядра?
https://elixir.bootlin.com/linux/v4.2/source/include/uapi/linux/mman.h#L9
нашёл

Alexey
15.08.2018
14:31:58

Max
15.08.2018
14:32:31
и ещё:
http://catap.ru/blog/2009/05/03/about-memory-oom-killer/
http://catap.ru/blog/2009/05/05/about-memory-overcommit-memory/

Alexander
15.08.2018
14:33:47

Юра Незнанов
15.08.2018
14:34:29

Alexander
15.08.2018
14:34:34
в вижле, напомню, именно семплирующий

Юра Незнанов
15.08.2018
14:34:50
ну вижловской да

Alexander
15.08.2018
14:34:58
xperf емнип тоже

Max
15.08.2018
14:35:19

Alexander
15.08.2018
14:35:30
вот про heaptrack не помню. могу сказать, что valgrind точно не пропустит, так как он эмулирующий
valgrind + massif кто-то выше упоминал уже
но вообще я бы при первом приближении наверное не сильно парился и началд бы работу с каким-нибудь heaptrack
с высокой частотой снимков

Pavel
15.08.2018
14:40:53
а какие библиотеки для жсона есть? небольшие. кроме rapidjson и nlohmann

Google

Alexander
15.08.2018
14:41:33

Дед Пегас
15.08.2018
14:42:10
Вон, minijson_reader/minijson_writer
Однофайловые =)

Pavel
15.08.2018
14:43:53
callback-based. да я с ума сойду

Alexander
15.08.2018
14:43:54
обожаю однофайловые header-only либы... открывать в IDE

Andrey
15.08.2018
14:46:46
А вот бенчмарки для них на всякий случай https://github.com/miloyip/nativejson-benchmark

Igor
15.08.2018
14:47:06

Pavel
15.08.2018
14:50:23

Igor
15.08.2018
14:52:09
как что-то плохое ?