amarao_san

Categories:

Продолжение мистики с питоном

Точнее, разрешение мистики.

Моя главная загадка — с адресами питоновы объектов вне /proc/self/maps разрешилась просто:

1. Cpython действительно использует адрес как id. Всегда.

2. 'x' в GDB позволяет посмотреть объект в адресном пространстве отлаживаемого процесса.

3. Но! Всё, что выполняется с 'python' в gdb, исполняется в адресном пространстве gdb. Т.е. к отлаживаемому процессу никак не относится.

4. gc — плохой метод получать список объектов. Все иммутабельные объекты в gc.get_objects() просто отсутствуют. Например, все строки. Все tuple'ы иммутабельных объектов, и т.д. Более того, мутабельные контейнеры (списки, словари, множества) состоящие только из иммутабельных объектов, в выводе gc отсутствуют.

Я разрешил все WTF, которые у меня возникли в процессе, но саму загадку я не разрешил.

На самом деле, я так и не научился делать инспекцию heap'а и/или списка питоновых объектов по core dump. Если кто умеет — подскажите.

Upd: Я написал proof of concept фрагментатора памяти питона. После выполнения объекты занимают в памяти примерно 300Мб, а сам питон — 3.6Гб, как на пике потребления (до удаления больших объектов).

Рекламирующим pypy, сравните, пожалуйста. Надо запустить и посмотреть (не прибивая) сколько там в top'е RES сожрал.

Upd2: Уточнение: питон начинает отдавать память в ОС при размере удаляемого объекта от 128кб.

Error

default userpic

Your IP address will be recorded 

When you submit the form an invisible reCAPTCHA check will be performed.
You must follow the Privacy Policy and Google Terms of use.