Date: Fri, 30 May 1997 19:42:43 -0700 From: Julian Elischer <julian@whistle.com> Cc: julian@alpo.whistle.com, hackers@freebsd.org Subject: WHy does Appache eat my system? Message-ID: <338F9023.41C67EA6@whistle.com>
next in thread | raw e-mail | index | archive | help
I've been doing some kernel profiling on a freeBSD system, trying to figure out why I have 0% idle and 60% in the kernel. I haven't tracked it all down but here are a few bits of the traces... Apache seems to be the main culprit. does anyoen who really knows apache heve any suggestions? ---------begin Kernel syscall trace extract----- 10077 httpd 865038863.248455 RET read 8192/0x2000 10077 httpd 865038863.249045 CALL break(0x13e000) 10077 httpd 865038863.249476 RET break 0 10077 httpd 865038863.249817 CALL break(0x140000) 10077 httpd 865038863.250209 RET break 0 10077 httpd 865038863.250547 CALL break(0x142000) 10077 httpd 865038863.250936 RET break 0 10077 httpd 865038863.251277 CALL break(0x144000) 10077 httpd 865038863.251665 RET break 0 10077 httpd 865038863.252005 CALL break(0x146000) 10077 httpd 865038863.252394 RET break 0 10077 httpd 865038863.252732 CALL break(0x148000) 10077 httpd 865038863.253117 RET break 0 10077 httpd 865038863.253454 CALL break(0x14a000) 10077 httpd 865038863.254057 RET break 0 10077 httpd 865038863.254463 CALL break(0x14c000) 10077 httpd 865038863.254860 RET break 0 10077 httpd 865038863.255196 CALL break(0x14e000) 10077 httpd 865038863.255579 RET break 0 ### this continues for a while 10077 httpd 865038863.312158 CALL break(0x1e6000) 10077 httpd 865038863.312546 RET break 0 10077 httpd 865038863.312879 CALL break(0x1e8000) 10077 httpd 865038863.313263 RET break 0 10077 httpd 865038863.313598 CALL break(0x1ea000) ---------end extract-- 'break' is the 'brk()' syscall. This occurs apparently on every request.. it's just spent about 60 msec doing basically nothing but picking up 8K pages of memeory from the kernel. I can't help thinking that this must be able to be made better. when the request is serviced, it is ALL thrown back. and the next request goes and fetches it again. A dump of a kernel execution profile at the same time shows the following: --begin extract--------------------------------------------- 13.23 63.35 614785/614785 _Xsyscall [2] [3] 78.1 13.23 63.35 614785 _syscall [3] 2.61 19.49 415263/415263 _obreak [4] 0.52 10.42 47275/47275 _read [7] 0.26 4.45 17514/17514 _write [17] 0.07 4.63 7122/7122 _stat [18] 1.13 3.39 9210/9210 _select [19] 0.11 3.82 6206/6206 _open [23] 2.87 0.00 613302/671847 _generic_copyin[29] 0.05 0.73 5868/5868 _fstat [77] 0.09 0.61 8722/8722 _flock [79] 0.01 0.65 937/937 _lstat [87] 0.05 0.60 7391/7391 _close [88] ---end extract-- this shows that 19% of all system time was being spent in obreak() (which is the brk() syscall.) over a 100 second period there were 415263 calls to it (4000 per second?) which nearly all came from apache. Has anyone done anything on this? our system is limited to 6 servers so each is doing 800 brk() calls per second!(in fact in my traces they are nearly all done by a couple of the servers. I am also tracking more such innefficiencies, but this is the obvious one to start with :) If not I will work on it and make the results available but I hate to duplicate work by others. julian (julian@freebsd.org, julian@whistle.com)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?338F9023.41C67EA6>