Как продолжить устранение утечки памяти, связанной с процессом Python? - PullRequest
0 голосов
/ 22 октября 2019

У меня есть робот-питон, который торгует криптовалютой (не могу поделиться исходным кодом, он не мой). Я приобрел этого робота у другого разработчика, который сильно испортил его, и мне удалось немного его исправить.

Недавно я получил жалобу на то, что у робота течет память, ~98 МБ / день.

Я немного устранил это, и вот что я нашел:

  1. В скрипте есть основной цикл, который просто проверяет некоторые условиякогда покупать или продавать крипто. Я добавил objgraph.show_growth(), чтобы увидеть, сколько объектов было выделено в конце и в начале цикла.

    while True:
        print("MEM PROFILING START: " + datetime.now().strftime("%d/%m/%Y %H:%M:%S"), flush=True)
        objgraph.show_growth()
        print("MEM PROFILING END: " + datetime.now().strftime("%d/%m/%Y %H:%M:%S"), flush=True)
    
        # ... some logic
    
        print("MEM PROFILING START: " + datetime.now().strftime("%d/%m/%Y %H:%M:%S"), flush=True)
        objgraph.show_growth()
        print("MEM PROFILING END: " + datetime.now().strftime("%d/%m/%Y %H:%M:%S"), flush=True)
    

    К моему удивлению, после запуска робота он выделяет кучу или что-то еще, но затем естьвыделений больше нет, но потребление памяти все еще растет.

  2. Еще одна вещь, которую я попытался, - сбросить разность памяти - из одного момента времени в другой (ссылка: https://unix.stackexchange.com/a/399115/63883):dump memory ./dump_diff3.dump 0x0f3da000 0x0f43e000 Я вижу, что в резидентном наборе сохраняется куча информации о сертификатах: enter image description here

Я подумал, что это, вероятно, будет означать утечкув некоторых библиотеках python. Я обновил библиотеку запросов и все зависимости, но утечка все еще существует, и все еще есть куча информации сертификата, которая сохраняется.

Вопрос: Чтобудет следующий шаг, чтобы попробовать? Я думал об обновлении библиотеки OpenSSL и оболочки Python (список версий ниже) - но меня интересуют некоторые другие методы устранения неполадокnd решения:

root@688213:~# dpkg -l '*openssl*'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                               Version                Architecture           Description
+++-==================================-======================-======================-=========================================================================
ii  libgnutls-openssl27:amd64          3.4.10-4ubuntu1.5      amd64                  GNU TLS library - OpenSSL wrapper
ii  openssl                            1.0.2g-1ubuntu4.15     amd64                  Secure Sockets Layer toolkit - cryptographic utility
ii  openssl-blacklist                  0.5-3                  all                    Blacklists for  OpenSSL RSA keys and tools
un  python-openssl-doc                 <none>                 <none>                 (no description available)
ii  python3-openssl                    17.3.0-1~0+ubuntu16.04 all                    Python 3 wrapper around the OpenSSL library
un  python3-openssl-dbg                <none>                 <none>                 (no description available)
...