Hi Andy,
Just to confirm, did you applied the patch in MDL-40130 yet, and do you still see the out of memory error with it applied?
Here is the MDL_PERF output for our testing site, running 2.5 with no patches applied. We have 471 course categories, also inserted (using the correct API functions) by our custom enrol plugin linked against our MIS. Our maximum course category depth is five.
[Thu Jun 27 08:15:41 2013] [error] [client 10.32.18.50] PERF: /25/course/manage.php time: 131.309689s memory_total: 48033848B (45.8MB) memory_growth: 47686392B (45.5MB) memory_peak: 68457936B (65.3MB) includecount: 409 contextswithfilters: 1 filterscreated: 7 textsfiltered: 1 stringsfiltered: 0 langcountgetstring: 2437 includedyuimodules: 0 includedjsmodules: 2 db reads/writes: 1480/1 ticks: 13132 user: 10107 sys: 1469 cuser: 0 csys: 0 serverload: 0.99 Session: 54.4KB Caches used (hits/misses/sets): core/config {** static persist **(1/22/0) cachestore_memcached(22/0/0) } core/databasemeta {** static persist **(926/14/0) cachestore_memcached(14/0/0) } core/string {** static persist **(3446/397/0) cachestore_memcached(397/0/0) } core/pluginlist {** static persist **(19/42/0) cachestore_memcached(42/0/0) } core/plugintypes {** static persist **(999/2/0) cachestore_memcached(2/0/0) } core/yuimodules {cachestore_memcached(1/0/0) } core/plugininfo_base {** static persist **(1017/2/0) cachestore_memcached(2/0/0) } core/plugininfo_mod {** static persist **(84/1/0) cachestore_memcached(1/0/0) } core/plugininfo_block {** static persist **(63/1/0) cachestore_memcached(1/0/0) } core/plugininfo_filter {** static persist **(6/1/0) cachestore_memcached(1/0/0) } core/plugininfo_repository {** static persist **(20/1/0) cachestore_memcached(1/0/0) } core/repositories {** static persist **(0/13/0) cachestore_static(0/13/24) } core/coursecat {cachestore_file(1/0/944) **static session**(944/0/943) } core/eventinvalidation {** static persist **(0/2/0) } .
As a comparison, here is the same output with MDL-40130:
[Thu Jun 27 08:10:58 2013] [error] [client 10.32.18.50] PERF: /25/course/manage.php time: 48.567338s memory_total: 48461736B (46.2MB) memory_growth: 48114280B (45.9MB) memory_peak: 68884416B (65.7MB) includecount: 409 contextswithfilters: 1 filterscreated: 7 textsfiltered: 1 stringsfiltered: 0 langcountgetstring: 2437 includedyuimodules: 0 includedjsmodules: 2 db reads/writes: 600/0 ticks: 4857 user: 2352 sys: 473 cuser: 0 csys: 0 serverload: 0.56 Session: 54.4KB Caches used (hits/misses/sets): core/config {** static persist **(1/22/0) cachestore_memcached(22/0/0) } core/databasemeta {** static persist **(475/14/0) cachestore_memcached(14/0/0) } core/string {** static persist **(3446/397/0) cachestore_memcached(397/0/0) } core/pluginlist {** static persist **(19/42/0) cachestore_memcached(42/0/0) } core/plugintypes {** static persist **(999/2/0) cachestore_memcached(2/0/0) } core/yuimodules {cachestore_memcached(1/0/0) } core/plugininfo_base {** static persist **(1017/2/0) cachestore_memcached(2/0/0) } core/plugininfo_mod {** static persist **(84/1/0) cachestore_memcached(1/0/0) } core/plugininfo_block {** static persist **(63/1/0) cachestore_memcached(1/0/0) } core/plugininfo_filter {** static persist **(6/1/0) cachestore_memcached(1/0/0) } core/plugininfo_repository {** static persist **(20/1/0) cachestore_memcached(1/0/0) } core/repositories {** static persist **(0/13/0) cachestore_static(0/13/24) } core/coursecat {cachestore_file(1/0/523) **static session**(943/521/522) } core/eventinvalidation {** static persist **(0/3/0) } core/coursecattree {** static persist **(0/522/0) cachestore_memcached(522/0/1) } .
And here's the same style output with MDL-40280 also applied:
[Thu Jun 27 08:12:50 2013] [error] [client 10.32.18.50] PERF: /25/course/manage.php time: 20.871029s memory_total: 48107752B (45.9MB) memory_growth: 47760304B (45.5MB) memory_peak: 68528576B (65.4MB) includecount: 409 contextswithfilters: 1 filterscreated: 7 textsfiltered: 1 stringsfiltered: 0 langcountgetstring: 2437 includedyuimodules: 0 includedjsmodules: 2 db reads/writes: 559/0 ticks: 2087 user: 1416 sys: 411 cuser: 0 csys: 0 serverload: 0.50 Session: 54.4KB Caches used (hits/misses/sets): core/config {** static persist **(1/22/0) cachestore_memcached(22/0/0) } core/databasemeta {** static persist **(475/14/0) cachestore_memcached(14/0/0) } core/string {** static persist **(3446/397/0) cachestore_memcached(397/0/0) } core/pluginlist {** static persist **(19/42/0) cachestore_memcached(42/0/0) } core/plugintypes {** static persist **(999/2/0) cachestore_memcached(2/0/0) } core/yuimodules {cachestore_memcached(1/0/0) } core/plugininfo_base {** static persist **(1017/2/0) cachestore_memcached(2/0/0) } core/plugininfo_mod {** static persist **(84/1/0) cachestore_memcached(1/0/0) } core/plugininfo_block {** static persist **(63/1/0) cachestore_memcached(1/0/0) } core/plugininfo_filter {** static persist **(6/1/0) cachestore_memcached(1/0/0) } core/plugininfo_repository {** static persist **(20/1/0) cachestore_memcached(1/0/0) } core/repositories {** static persist **(0/13/0) cachestore_static(0/13/24) } core/coursecat {cachestore_file(1/0/3) **static session**(1414/1/2) } core/eventinvalidation {** static persist **(0/2/0) } .
As you can see, the memory usage is pretty reasonable for both (65MB peak is pretty reasonable IMO).
Things to note about these results:
- we have got a memcached MUC store set up, however the coursecat MUC cache used by this part of coursecat does not used the memcached store (it's a session cache);
- we have php5-apc installed and configured appropriately
- this is against a postgres database (reasonably well tuned for a testing system)
- this is a testing system and under no real load
Andrew