У меня есть робот-питон, который торгует криптовалютой (не могу поделиться исходным кодом, он не мой). Я приобрел этого робота у другого разработчика, который сильно испортил его, и мне удалось немного его исправить.
Недавно я получил жалобу на то, что у робота течет память, ~98 МБ / день.
Я немного устранил это, и вот что я нашел:
В скрипте есть основной цикл, который просто проверяет некоторые условиякогда покупать или продавать крипто. Я добавил 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)
К моему удивлению, после запуска робота он выделяет кучу или что-то еще, но затем естьвыделений больше нет, но потребление памяти все еще растет.
Еще одна вещь, которую я попытался, - сбросить разность памяти - из одного момента времени в другой (ссылка: https://unix.stackexchange.com/a/399115/63883):dump memory ./dump_diff3.dump 0x0f3da000 0x0f43e000
Я вижу, что в резидентном наборе сохраняется куча информации о сертификатах:
Я подумал, что это, вероятно, будет означать утечкув некоторых библиотеках 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)