From owner-freebsd-questions Mon Jul 2 8:53:51 2001 Delivered-To: freebsd-questions@freebsd.org Received: from antares.gecadsoftware.com (antares.gecadsoftware.com [193.230.167.76]) by hub.freebsd.org (Postfix) with SMTP id 37DD537B401 for ; Mon, 2 Jul 2001 08:53:40 -0700 (PDT) (envelope-from teo@gecadsoftware.com) Received: (qmail 78955 invoked from network); 2 Jul 2001 15:54:52 -0000 Received: from unknown (HELO taz.gecadsoftware.com) (193.230.245.17) by antares.gecadsoftware.com with SMTP; 2 Jul 2001 15:54:51 -0000 Received: from teo.gecadsoftware.com ([193.230.245.169]) by taz.gecadsoftware.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) id N7KC0YL2; Mon, 2 Jul 2001 18:51:35 +0300 Received: (qmail 12545 invoked by uid 500); 2 Jul 2001 15:51:21 -0000 Date: Mon, 2 Jul 2001 18:51:21 +0300 From: teo@gecadsoftware.com To: Subject: Re: Is it possible to get more power from a FreeBSD system running Apache/MySQL/PHP ? Message-ID: <20010702185121.D11890@gecadsoftware.com> Reply-To: teo@gecadsoftware.com Mail-Followup-To: teo@gecadsoftware.com, References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.15i In-Reply-To: ; from nadir@attractive.com on Mon, Jul 02, 2001 at 03:13:24PM +0200 Organization: GeCAD Software Comment: Worry less, RAV is watching! X-Operating-System: Linux 2.2.16 i686 up 20:55 Sender: owner-freebsd-questions@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Hi Nadir! On Mon, 02 Jul 2001, Nadir@Attractive wrote: > I have few questions: > > 1. Anyone knows if Apache 2.0 can handle more visitors than Apache 1.3.x > in the current configuration that we have? Apache 2.0 is suppose to be multithreaded, and the preliminary benchmarks I saw were promising, but Apache 1.3 is tough enough. > 2. Can I optimize the FreeBSD system that we currently have even further > to get more power of the server? I have not much experience w/ FreeBSD (newcomer to it) but I can share some of my experience > 3. The MAXUSERS configuration parameter is set to 256, and this is the > kernel's setting now. If I set it to be larger, say 1024, will it yield > better results? that is one of the points. you'll have to recompile the kernel for that, and don't worry, you'll get an improved version, cuz you'll keep in only what you need. then take a look at sysctl. You have several paramenters that can be adjusted, namely number of open files per process, size of network buffers etc. You'll have to tune it for your configuration (e.g. for network performance you have several tool in FreeBSD for that, check the packages) > 4. Personally I think that this server can do MUCH better, and maybe the > server's configuration is inaccurate, or insufficient. Any suggestions > where to start? 1. Tune Apache 2. Tune MySQL 3. Tune PHP 1. Apache - Check Apacheweek.com. I think there I saw once some recomandations e.g. HostnameLookups On - do you really need to have the hostnames in the logs? remember that this mean a DNS query for each client. Turn it off, and have the logs analized offline, if you want the FQDNs of the visitors ExtendedStatus On - another resource consuming directive. Turn it off on production servers. FollowSymLinks - try to avoid it; if you don't have any symlinks, taek it out. Another tricks for high trafic would be: Logging - what do we actually need logged? There are a lot of pages out there designed with Dreamwaver or other tools that produce thousands of mages, and a complete page has a correspondent in lots of entries in the logs, 99.99% of them regarding images. I bet a check on request is faster than a disk write, so SetEnvIf Request_URI "\.(gif|jpe?g)$" dont_log=1 CustomLog /var/log/www/www.ravantivirus.com-access_log common env=!dont_log Headers - there aren't much, but they are something http.conf - ServerTokens ProductOnly php.ini - expose_php = off Images delivery - I've heard about a nice trick to speed up images delivery. You set up a separate sever for images, e.g. for www.foobar.com, have images.foobar.com, which only delivers images this should be a separate server, namely a trimmed down Apache, statically link which eventually to use MapFile to map most requested files (e.g. the one from menus etc.) or thttpd, a faster server for statical content. Note that if you set a cookie it will be sent along even in the requests for images, so if you have lots of big and yummy cookies, they will eat bandwidth on each of that miriad of requests for the fancy menus your designer(s) made. Having a separate domain for images cuts them out, cause they won't be sent anylonger (for an obvious reason, i.e. different "domain") 2. PHP - Compile PHP statically into Apache (--with-apache, not --with-apxs) so you'll save php loading time. - Your process grew that big because the memory allocated by PHP isn't return to the system, so the httpd process grows in time. You may try to use --with-memory-limit when configuring php to impose a memory limit or better: - when doing large queries, don't fetch them into arrays, but just use mysql_fetch_array() as you need and don't forget mysql_free_result() at the end. - have a code review and profiling, to see where it spends more time and which scripts eat up lots of memory. Generally, it's because of db queries. 1+2. Compressed output - can be done either with mod_gzip.c or with a Rewrite trick or at PHP level; long story and interesting :) on short, for clients that say "Accept-Encoding: gzip" in request headers you can send compressed content. PHP as of 4.0.5 (IIRC) has a working ob_gzhanlder, and you can do it at PHP level. 3. MySQL - I don't have much experience w/ MySQL tunning parameters, so not much to say on it; - under support-files in MySQL distribution you have some samples of my.cnf for different needs. Take a look, it might be that my-large.cnf or my-huge.cnf can suit your needs (just copy it to /etc/my.cnf) - other stuff I remember is that MySQL performs better on "reads", so try to avoid inserts or use LOW_PRIORITY. Optimize your most common tables often (use isamchk), you'll "feel" the difference. Pay special atention to indexes (read "optimization tricks" from mySQL manual - spoiler: have an index for any field appearing in where clauses) 4. Network Probably other FreeBSD wizards have tips on tunning network throughput hope it helps. -- teodor To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message