NYCPHP Meetup

NYPHP.org

[nycphp-talk] PHP and memory usage

Brent Baisley brent at landover.com
Fri Oct 15 15:19:29 EDT 2004


Have you tried just increasing the memory limit in the php.ini file? I 
think it defaults to 8MB.

Of course, that is a temporary measure. The problem is really that your 
code doesn't scale. Are you passing by reference? PHP4 makes copies of 
variables when you pass them to functions, so you may actually have 2 
or 3 (or more) copies of your data depending on how your classes are 
setup.

Are you merging the complete list with the template and then passing 
the resultant array off to be mailed? That's a lot of customized copies 
of the template (6,000+) to hold in memory. It's probably the size of 
the template that is causing you problems. Adding 1 character to the 
template will cause an additional 6,000 characters to be stored in 
memory. That eats up lots of memory real fast. To scale it, you would 
need to do it in reasonable chunks, or even one at a time, reusing the 
variables to "flush" memory.


On Oct 14, 2004, at 10:10 PM, Marc Antony Vose wrote:

> Hi there:
>
> This is a very general question, but I don't know where to begin, but 
> generally.  I have, over the years built a fairly complex publishing 
> system which is installed on several sites.  Recently, I've noticed 
> that my mailing list component is choking; PHP bunks out with a memory 
> limit error, which is very unfortunate, since there's no way of 
> knowing how many messages were sent before this happened.
>
> I need to address this issue, but I wanted to get people's strategic 
> opinions about what to cut out in order to reduce memory consumption.
>
> Basically, my central data class extracts names and email addresses 
> out of a database, stores that in an array.  We're talking around 
> 6,000 users here...not a huge number, but sizable.
>
> Then, I loop through the returned users, create a custom message for 
> them by replacing codes in a template, and pass it off to a class of 
> mine which is just a wrapper for PHPMailer.
>
> That's the basic structure.
>
> So, what should I do?  A few salient points:
>
> : Do objects and arrays eat up a ton of memory?  Should I instead 
> select each user separately inside the loop (more database 
> connections, but fewer items stored each time)?
>
> : Should I be unsetting variables as soon as I no longer need them? 
> Would this make much of a difference?
>
> : Anything else I should look at?  My goal here is to build it so it 
> will scale upward; this project will eventually have tens of thousands 
> of users...maybe hundreds of thousands.
>
> Thanks much,
>
> -- 
> Marc Antony Vose
> http://www.suzerain.com/
>
> What can be shown cannot be said.
> -- Ludwig Wittgenstein
> _______________________________________________
> New York PHP Talk
> Supporting AMP Technology (Apache/MySQL/PHP)
> http://lists.nyphp.org/mailman/listinfo/talk
> http://www.newyorkphp.org
>
>
-- 
Brent Baisley
Systems Architect
Landover Associates, Inc.
Search & Advisory Services for Advanced Technology Environments
p: 212.759.6400/800.759.0577




More information about the talk mailing list