Very much so, thank you! I'll give it a shot this evening when I start working on the project again and let you know if it's any better.
On Tue, Jan 14, 2014 at 7:48 AM, Mike Lovell <[email protected]> wrote: > On 01/14/2014 04:16 AM, S. Dale Morrey wrote: > >> I'm building an online service. I expect that this may have to scale to >> tens of thousands of users. For the sake of having a drop dead simple >> deployment. I decided to build the website front end on top of Drupal (the >> service itself is linked to from the site, but is actually delivered by >> node.js and thus wasn't part of this particular test). >> >> I have had all kinds of fun in the past with PHP/MySQL and even Drupal >> vulnerabilities, so I decided to sign the site up for regular security >> scanning. >> The scanner just fired up for the first time and when it was complete my >> site had essentially become non-responsive. (Strangely the security >> scanner marked the site as having passed though) >> >> Logging in via SSH showed quite literally hundreds and hundreds of >> <defunct> apache processes. I'm guessing that they were stress testing >> the >> site and obviously the site fell down. >> >> What bothers me is that there were hundreds of apache processes just >> sitting there dead. Since the box is only a single core with the ability >> to use up to 2 in a burst type situation (Amazon EC2 t1.micro to be >> exact). I don't really see the advantage of spinning up a whole new >> process just to deal with a new connection. Seems like death by a >> thousand >> paper cuts to me. >> >> I'm aware that node spins a new thread but not a new process. I would >> think that apache would have a mode to do that as well. Is there any >> advantage to 1 process per connection? Is there possibly a better >> configuration I could try that would allow it handle the load better? >> >> I'm aware that if the website is going to be under regular heavy load that >> there are some really important steps I can take such as serving static >> content from a CDN, putting the site behind an autoscaling load balancer >> etc. Those are in the works, but before I do all of that I want to make >> sure I have the best apache config I can considering the hardware >> limitations. This way we only scale once we've made the most effective >> use >> of hardware. >> >> FYI the server is running Ubuntu 12.04 with all the latest updates >> applied. Apache config is stock I'm even serving content right out of >> /var/www. Same with PHP. The DB server is on it's own seperate instance >> and is MySQL 5.6 managed by Amazon Simple RDS. >> >> Thanks in advance! >> > > Apache2 has multiple methods of doing concurrency called Multi-Processing > Modules. You'll might want to look at changing apache to use the worker mpm > module instead of the default prefork mpm module. > http://httpd.apache.org/docs/2.2/mpm.html is the starting place for the > docs related to the various apache mpm modules. Prefork is going to use a > new child process per connection where worker will spawn multiple processes > but then also have multiple threads in those children to handle multiple > connections. Though I'm not entirely sure how well worker handles various > other plugins, such as mod_wsgi. So you'll probably want to do some > research about worker with whatever infrastructure you're using for your > drupal installation. > > It looks like there is a separate package for apache with prefork vs > apache with worker in debian and ubuntu. To get the worker version, you'll > need to install the apache2-mpm-worker package which will probably replace > apache2-mpm-prefork. > > Hope that helps. > > mike > > > /* > PLUG: http://plug.org, #utah on irc.freenode.net > Unsubscribe: http://plug.org/mailman/options/plug > Don't fear the penguin. > */ > /* PLUG: http://plug.org, #utah on irc.freenode.net Unsubscribe: http://plug.org/mailman/options/plug Don't fear the penguin. */
