My application, basically parses log files and presents that using web2py
So each flat file is read line by line and inserted to a sqlite file.
I use a global variable rows to read complete sqlite files later and do
various filters and present data.
So after creating rows as a global variable, when I read multiple logs, the
amount of memory would just keep growing.. nothing is freed back.
So, I used exclude to remove all global rows.
This helped quite a bit..
But it seems that it does not release the entire memory.
I was trying to profile the memory, and one can see see memory utilized by
rows
Line # Mem usage Increment Line Contents
================================================
96 37.5 MiB 0.0 MiB @profile
97 def read_all_rows():
100 40.3 MiB 2.8 MiB read_alerts_rows()
101 56.6 MiB 16.3 MiB read_manager_rows()
102 114.7 MiB 58.0 MiB read_store_rows()
103 129.9 MiB 15.3 MiB read_hydra_rows()
104 146.0 MiB 16.1 MiB read_kernel_rows()
105 170.0 MiB 24.0 MiB read_gossip_rows()
Total rows after reading manager_rows = 9775
Total rows after reading store_rows = 36378
Total rows after reading gossip_rows = 13763
Line # Mem usage Increment Line Contents
================================================
111 174.3 MiB 0.0 MiB @profile
112 def clear_all_rows():
116 174.3 MiB 0.0 MiB if len(manager_rows) > 0:
117 174.3 MiB 0.0 MiB for row in
alerts_rows.exclude(lambda row: row.id > 0):
118 174.3 MiB 0.0 MiB pass
119 174.3 MiB 0.0 MiB gc.collect()
120 174.3 MiB 0.0 MiB for row in
manager_rows.exclude(lambda row: row.id > 0):
121 174.3 MiB 0.0 MiB pass
122 163.3 MiB -11.0 MiB gc.collect()
123 163.8 MiB 0.5 MiB for row in
store_rows.exclude(lambda row: row.id > 0):
124 163.8 MiB 0.0 MiB pass
125 124.4 MiB -39.4 MiB gc.collect()
126 124.5 MiB 0.1 MiB for row in
hydra_rows.exclude(lambda row: row.id > 0):
127 124.5 MiB 0.0 MiB pass
128 114.8 MiB -9.7 MiB gc.collect()
129 114.9 MiB 0.1 MiB for row in
kernel_rows.exclude(lambda row: row.id > 0):
130 114.9 MiB 0.0 MiB pass
131 104.2 MiB -10.7 MiB gc.collect()
132 104.5 MiB 0.3 MiB for row in
gossip_rows.exclude(lambda row: row.id > 0):
133 104.5 MiB 0.0 MiB pass
134 88.0 MiB -16.5 MiB gc.collect()
140 87.7 MiB 0.0 MiB gc.collect()
Total rows after exclude manager_rows = 0
Total rows after exclude store_rows = 0
Total rows after exclude gossip_rows = 0
We can see that what is taken is not given back.
This was a small set of logs.. but sometimes logs can be larger and total
memory can go around 1.4Gb..
The program crashes if the memory goes above 1.6/1.8Gb
So not giving back all the used memory, becomes kind of important.
Any ideas or any suggestions would be helpful.
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.