Как chatgpt-5 помог мне пофиксить утечку памяти

Мой вопрос начался с осознания того, что ram почему-то забивается спустя 10 минут работы на сервере
Мой вопрос начался с осознания того, что ram почему-то забивается спустя 10 минут работы на сервере
chatgpt ответила так и предложила этот код, чтобы посмотреть происходит ли в этом месте утечка
chatgpt ответила так и предложила этот код, чтобы посмотреть происходит ли в этом месте утечка
import plutus import os import psutil import time # Преобразуем hex приватник в публичный, потом в адрес — в цикле def memory_test(iterations=500000, use_fastecdsa=True): process = psutil.Process(os.getpid()) start_mem = process.memory_info().rss print(f"[START] RAM: {start_mem / 1024 / 1024:.2f} MB") priv_key = "1" * 64 # фиктивный приватник для теста for i in range(iterations): pubkey = plutus.private_key_to_public_key(priv_key, use_fastecdsa) addr = plutus.public_key_to_address(pubkey) if i % 50000 == 0 and i > 0: mem_now = process.memory_info().rss print(f"[{i}] RAM: {mem_now / 1024 / 1024:.2f} MB") end_mem = process.memory_info().rss print(f"[END] RAM: {end_mem / 1024 / 1024:.2f} MB") print(f"Δ RAM: {(end_mem - start_mem) / 1024 / 1024:.2f} MB") if __name__ == "__main__": # Сначала тестируем с fastecdsa print("\n--- Testing fastecdsa=True ---") memory_test(iterations=200000, use_fastecdsa=True) # Потом без fastecdsa print("\n--- Testing fastecdsa=False ---") memory_test(iterations=200000, use_fastecdsa=False)

По итогу оказалось что да, происходит
Результаты теста:

Как chatgpt-5 помог мне пофиксить утечку памяти

Chatgpt затем предложила потестить нативную реализацию алгоритма ecsda, которую она написала сама:

import os import psutil from ecdsa import SigningKey, SECP256k1 def private_key_to_public_key_py(private_key_hex: str) -> str: sk = SigningKey.from_string(bytes.fromhex(private_key_hex), curve=SECP256k1) vk = sk.verifying_key x = vk.pubkey.point.x() y = vk.pubkey.point.y() return f"04{x:064x}{y:064x}" def memory_test(iterations=200000): process = psutil.Process(os.getpid()) start_mem = process.memory_info().rss print(f"[START] RAM: {start_mem / 1024 / 1024:.2f} MB") priv_key = "1" * 64 for i in range(iterations): pubkey = private_key_to_public_key_py(priv_key) # можно оставить address генерацию для полноты: # addr = plutus.public_key_to_address(pubkey) if i % 50000 == 0 and i > 0: mem_now = process.memory_info().rss print(f"[{i}] RAM: {mem_now / 1024 / 1024:.2f} MB") end_mem = process.memory_info().rss print(f"[END] RAM: {end_mem / 1024 / 1024:.2f} MB") print(f"Δ RAM: {(end_mem - start_mem) / 1024 / 1024:.2f} MB") if __name__ == "__main__": memory_test()
И вот он, результат 😎
И вот он, результат 😎
6
1
1
9 комментариев