diff options
| author | Sergey Shepelev <temotor@gmail.com> | 2014-09-01 04:21:50 +0400 |
|---|---|---|
| committer | Sergey Shepelev <temotor@gmail.com> | 2014-09-01 04:21:50 +0400 |
| commit | f574c4feb153ad925ebe0dcf4a2020e5b6abc56d (patch) | |
| tree | ef401b8e86287b5837f52c8b01467c943642e682 /tests | |
| parent | a5fa0e050913a273ec03b2a6a22809b7f4b52c41 (diff) | |
| download | eventlet-f574c4feb153ad925ebe0dcf4a2020e5b6abc56d.tar.gz | |
greenio: manual memory leak test
https://github.com/eventlet/eventlet/pull/125
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/manual/__init__.py | 0 | ||||
| -rw-r--r-- | tests/manual/greenio_memtest.py | 83 |
2 files changed, 83 insertions, 0 deletions
diff --git a/tests/manual/__init__.py b/tests/manual/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/manual/__init__.py diff --git a/tests/manual/greenio_memtest.py b/tests/manual/greenio_memtest.py new file mode 100644 index 0000000..cb3390b --- /dev/null +++ b/tests/manual/greenio_memtest.py @@ -0,0 +1,83 @@ +import eventlet +from eventlet import greenio +import os + + +__test__ = False +_proc_status = '/proc/%d/status' % os.getpid() + +_scale = {'kB': 1024.0, 'mB': 1024.0*1024.0, + 'KB': 1024.0, 'MB': 1024.0*1024.0} + + +def _VmB(VmKey): + '''Private. + ''' + global _proc_status, _scale + # get pseudo file /proc/<pid>/status + try: + t = open(_proc_status) + v = t.read() + t.close() + except: + return 0.0 # non-Linux? + # get VmKey line e.g. 'VmRSS: 9999 kB\n ...' + i = v.index(VmKey) + v = v[i:].split(None, 3) # whitespace + if len(v) < 3: + return 0.0 # invalid format? + # convert Vm value to bytes + return float(v[1]) * _scale[v[2]] + + +def memory(since=0.0): + '''Return memory usage in bytes. + ''' + return _VmB('VmSize:') - since + + +def resident(since=0.0): + '''Return resident memory usage in bytes. + ''' + return _VmB('VmRSS:') - since + + +def stacksize(since=0.0): + '''Return stack size in bytes. + ''' + return _VmB('VmStk:') - since + + +def test_pipe_writes_large_messages(): + r, w = os.pipe() + + r = greenio.GreenPipe(r) + w = greenio.GreenPipe(w, 'w') + + large_message = b"".join([1024 * chr(i) for i in range(65)]) + + def writer(): + w.write(large_message) + w.close() + + gt = eventlet.spawn(writer) + + for i in range(65): + buf = r.read(1024) + expected = 1024 * chr(i) + if buf != expected: + print( + "expected=%r..%r, found=%r..%r iter=%d" + % (expected[:4], expected[-4:], buf[:4], buf[-4:], i)) + gt.wait() + + +if __name__ == "__main__": + _iter = 1 + while True: + test_pipe_writes_large_messages() + + _iter += 1 + if _iter % 10 == 0: + print("_iter = %d, VmSize: %d, VmRSS = %d, VmStk = %d" % + (_iter, memory(), resident(), stacksize())) |
