[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