Tôi có một ứng dụng máy chủ python phức tạp, chạy liên tục mọi lúc. Dưới đây là một phiên bản rất đơn giản của nó.Sử dụng bộ nhớ pypy tăng mãi mãi?
Khi tôi chạy ứng dụng bên dưới bằng python; "python Main.py". Nó sử dụng 8mb ram ngay lập tức, và ở lại 8mb ram, như nó phải.
Khi tôi chạy nó bằng pypy "pypy Main.py". Nó bắt đầu bằng cách sử dụng 22mb ram và theo thời gian sử dụng ram phát triển. Sau 30 giây ở tốc độ 50mb, sau một giờ với tốc độ 60mb.
Nếu tôi thay đổi "b.something()" thành "pass", nó sẽ không chiếm dụng bộ nhớ như thế.
Tôi đang sử dụng pypy 1.9 trên OSX 10.7.4 Tôi ổn với pypy sử dụng nhiều ram hơn python.
Có cách nào để ngăn chặn pypy ăn bộ nhớ trong một thời gian dài không?
import sys
import time
import traceback
class Box(object):
def __init__(self):
self.counter = 0
def something(self):
self.counter += 1
if self.counter > 100:
self.counter = 0
try:
print 'starting...'
boxes = []
for i in range(10000):
boxes.append(Box())
print 'running!'
while True:
for b in boxes:
b.something()
time.sleep(0.02)
except KeyboardInterrupt:
print ''
print '####################################'
print 'KeyboardInterrupt Exception'
sys.exit(1)
except Exception as e:
print ''
print '####################################'
print 'Main Level Exception: %s' % e
print traceback.format_exc()
sys.exit(1)
Dưới đây là danh sách thời gian và thời gian sử dụng ram tại thời điểm đó (tôi để nó chạy qua đêm).
Wed Sep 5 22:57:54 2012, 22mb ram
Wed Sep 5 22:57:54 2012, 23mb ram
Wed Sep 5 22:57:56 2012, 24mb ram
Wed Sep 5 22:57:56 2012, 25mb ram
Wed Sep 5 22:57:58 2012, 26mb ram
Wed Sep 5 22:57:58 2012, 27mb ram
Wed Sep 5 22:57:59 2012, 29mb ram
Wed Sep 5 22:57:59 2012, 30mb ram
Wed Sep 5 22:58:00 2012, 31mb ram
Wed Sep 5 22:58:02 2012, 32mb ram
Wed Sep 5 22:58:03 2012, 33mb ram
Wed Sep 5 22:58:05 2012, 34mb ram
Wed Sep 5 22:58:08 2012, 35mb ram
Wed Sep 5 22:58:10 2012, 36mb ram
Wed Sep 5 22:58:12 2012, 38mb ram
Wed Sep 5 22:58:13 2012, 39mb ram
Wed Sep 5 22:58:16 2012, 40mb ram
Wed Sep 5 22:58:19 2012, 41mb ram
Wed Sep 5 22:58:21 2012, 42mb ram
Wed Sep 5 22:58:23 2012, 43mb ram
Wed Sep 5 22:58:26 2012, 44mb ram
Wed Sep 5 22:58:28 2012, 45mb ram
Wed Sep 5 22:58:31 2012, 46mb ram
Wed Sep 5 22:58:33 2012, 47mb ram
Wed Sep 5 22:58:35 2012, 49mb ram
Wed Sep 5 22:58:35 2012, 50mb ram
Wed Sep 5 22:58:36 2012, 51mb ram
Wed Sep 5 22:58:36 2012, 52mb ram
Wed Sep 5 22:58:37 2012, 54mb ram
Wed Sep 5 22:59:41 2012, 55mb ram
Wed Sep 5 22:59:45 2012, 56mb ram
Wed Sep 5 22:59:45 2012, 57mb ram
Wed Sep 5 23:00:58 2012, 58mb ram
Wed Sep 5 23:02:20 2012, 59mb ram
Wed Sep 5 23:02:20 2012, 60mb ram
Wed Sep 5 23:02:27 2012, 61mb ram
Thu Sep 6 00:18:00 2012, 62mb ram
Hmm. Tôi không thể tái tạo điều này. Với pypy 1.9 (từ Macports) và OS X 10.6.8, tôi thấy việc sử dụng bộ nhớ (như được báo cáo bởi 'top', từ cột RSIZE) ở khoảng 46M. Nó có thể đáng giá một báo cáo lỗi. –
Tôi vẫn có quá trình đó đang chạy, điểm dữ liệu mới cho nó: Thu Sep 6 09:02:26 2012, 63mb ram – DavidColquhoun
Tôi có thể tạo lại điều này bằng pypy 1.8, nhưng 1.9 dường như đã sửa lỗi này – goncalopp