On Sep 1, 2006, at 11:15 AM, Daniel B. Hemmerich wrote:
We are concerned about how much memory we are using now that we are moving to modperl.Are there any good tools/procedures that we could use to determine how much memory our application is currently using – and then using that as a benchmark, determine how much more or less memory we are using after making changes to our application?
re: mp performance guide (in previous post) --its great for perfomance tuning. GTOP works well for the current memory size. Iinstall Apache::Status, and all of the bells & whistles to get the aggregate memory info printed ( i believe that means b::terse size and recdescent )
None of the modules can accurately measure shared memoryignore any info re: shared memory. just forget about it. it never measures right. the only way to measure shared memory is to watch free/swap memory and start adding clients/requests, trying to find the point where memory goes from free to swap ( the 'free' memory seems to be ok in top , but top can lie. watching your disks swap is a great indicator that you've maxxed out )
From my recent personal experience (assuming you are on *nix/*bsd, and using prefork)
run the server with 1 child on start, 1 maxclients, 0 spareservers -- so you only have the parent and a single child before you request any pages, note the vitrtual and res size of each item using 'ps aux'
run apache status, and show the main memory pagei copy-pasted that code into a text document then regexed and sorted it.
profile your apps based on that, looking for the fattest modules. if a module is too big for the benefits it gives, axe itFile::Find let me do a recursive search for templates to pre- compile in 8 lines of code. but it had a 3mb memory overhead. i replaced it with 15 lines of my own recursive search, that had a 4k overhead. on your own modules, replace $debug varaiables with DEBUG constants so they're compiled away my session parsing class went from 867k to 240k of memory ( when DEBUG is off ), and half as many opcodes
compare the loaded modules pre- and post- request. if you're seeing some modules get loaded after a request has been made, you should probably load them in a startup.pl
shut down as many non-essential processes as you can on the machine in question. open a seperate terminal, run 'top -U www' or whomever your httpd runs as. note the free system memory before you start apache and after
raise maxclients and startservers to 6, then 11 -- each time stopping and starting the server. it'll give you an idea of the memory consumed by 5 and 10 additional clients make some requests with 1,6,11 clients , either using AB or some sort of programmatic test suite.
in my experience, using my own framework, i've got this: 60mb parent apache 3mb child on startup 11mb child after 1 request+0-1.5mb per child per additional URI module (depending on page complexity) there's a slight growth per-child-per-request as well if you're using DBI -- DBI caches 120 SVs internally for statement handles PER CHILD. they don't get released until a counter hits 120, then it goes up again.
Mail converted by mhonarc 2.6.15
This archive provided courtesy of JSW4.NET, Internet Hosting Services for Small Business.