Re: suddendly high cpu load because of googlebot

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ok, i've started studying a few things, especially fastcgi, because
after reading your messages, i'm starting to think that one of the
scripts on a website is causing all this... anyway, in the meanwhile,
it happen again... so i hope to give you a clearer view on this
matter.

There are about 50 pids for apache, and 50 for mysql.

Top gives this:

top - 09:01:05 up 14 days, 14:01, 0 users, load average: 36.45, 36.33, 36.48
Tasks: 232 total, 36 running, 196 sleeping, 0 stopped, 0 zombie
Cpu(s): 52.1%us, 1.9%sy, 0.2%ni, 43.4%id, 1.6%wa, 0.4%hi, 0.4%si, 0.0%st
Mem: 3115464k total, 2993804k used, 121660k free, 207764k buffers
Swap: 5177336k total, 76k used, 5177260k free, 2039608k cached
PID	USER	PR	NI	VIRT	RES	SHR	S	%CPU	%MEM	TIME+	COMMAND
6343	apache	25	0	34148	15m	3540	R	19.6	0.5	0:05.49	/usr/sbin/httpd -k
start -DSSL
27394	apache	25	0	41588	23m	4328	R	19.6	0.8	30:35.21	/usr/sbin/httpd
-k start -DSSL
28396	apache	25	0	44904	26m	3692	R	19.6	0.9	24:19.87	/usr/sbin/httpd
-k start -DSSL
28607	apache	25	0	34248	15m	3616	R	19.6	0.5	21:07.42	/usr/sbin/httpd
-k start -DSSL
27235	apache	25	0	40412	22m	3868	R	9.8	0.7	19:15.02	/usr/sbin/httpd -k
start -DSSL
1602	apache	25	0	34284	15m	3620	R	5.9	0.5	3:28.19	/usr/sbin/httpd -k start -DSSL
6322	apache	18	0	41236	22m	3676	S	2.0	0.8	0:00.78	/usr/sbin/httpd -k start -DSSL
1	root	15	0	2160	596	516	S	0.0	0.0	0:01.24	init [3]
2	root	RT	-5	0	0	0	S	0.0	0.0	0:00.00	[migration/0]
[...]


And here is a screenshot of server-status: www . supermariolovers.com/status.png

These googlebot connections are not in time wait, and they're taking
up a slot! So i guess it's entirely the script's fault... am i right?

Cheers!


On Fri, Mar 9, 2012 at 8:07 PM, Simone Frattegiani
<simone.frattegiani@xxxxxxxxx> wrote:
> Thank you so much for all your helpful advice!
>
> I'll take a few days to review all your suggestions and anylize the
> problem, and i will let you know as soon as i'll have news!
>
> Cheers :)
>
> On Fri, Mar 9, 2012 at 2:01 PM, Tom Evans <tevans.uk@xxxxxxxxxxxxxx> wrote:
>> On Fri, Mar 9, 2012 at 8:07 AM, Simone Frattegiani
>> <simone.frattegiani@xxxxxxxxx> wrote:
>>> Hello,
>>>
>>> i suddendly started having CPU load issues, like this:
>>
>> A couple of things:
>>
>>> Server-status shows this:
>>>
>>> […]
>>> ReqPerSec: 6.37383
>>> BusyWorkers: 99
>>> IdleWorkers: 10
>>> Scoreboard: WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
>>>
>>
>> This is what worries me. You are handling 6.3 requests per second, but
>> have 100 active workers handling requests. This means your requests
>> are really, really slow. When requests are really slow, and the server
>> gets a little busy, two things happen:
>>
>> 1) Requests take even longer to serve, as the resource contention
>> (probably database) increases
>> 2) Apache has to serve more simultaneous requests, and so has to have
>> more children, which uses more CPU to start and run the processes, and
>> more RAM is used on the new process.
>>
>> When this reaches the tipping point, which can be due to not enough
>> RAM, not enough CPU, not enough IOPs, Apache has to start processes
>> faster than it can serve requests, and load will metaphorically
>> explode.
>>
>>> […]
>>> The commands "netstat -a | grep 66.249" shows 20 connections from
>>> googlebot ip, 1 in ESTABILISHEd status, the others in TIME WAIT.
>>>
>>
>> So this may be largely irrelevant. If they are all in TIME_WAIT, then
>> that is a keep alive connection. A keep alive connection isn't using
>> your CPU, so it isn't slowing down your webserver. What it is doing is
>> taking up a slot, which isn't ideal.
>>
>>> If i restart apache, everything gets back to normal.
>>>
>>> Any suggestions?
>>> THanks!
>>>
>>
>> I have a couple!
>>
>> First of all, you are using prefork MPM. This means to get an extra
>> slot, apache has to fork and start up a new child. This is not
>> efficient! If you use the worker or event MPM, then each child has
>> multiple threads, and so you do not require to start, or keep
>> starting, so many children. You will also have less CPU/RAM costs per
>> slot.
>>
>> This will stop CPU usage exploding when a lot of requests come in, and
>> hopefully you can serve requests faster.
>>
>> Finally, if you are worried about keep alive connections from google
>> bot, you should seriously consider event MPM. This will use a single
>> thread to handle ALL keep alive connections, waiting for a new request
>> on it, and handing the request off to a different thread once there is
>> data. This means you don't use multiple slots to handle keep alive
>> connections.
>>
>> Finally, you don't mention it, but I assume you are running some web
>> application, like PHP? I would recommend using fastcgi to host the
>> application, divorce it entirely from apache.
>> This will give you a clear idea of how much of your resources are
>> being devoted to PHP, and will actually reduce the amount of resources
>> over using mod_php. mod_php adds a PHP interpreter in every apache
>> child, whether it is serving a PHP request, a static file from disk,
>> or monitoring a keep alive connection.
>>
>> You can also strictly control how many PHP processes are used when
>> running with fastcgi.
>>
>> Cheers
>>
>> Tom
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@xxxxxxxxxxxxxxxx
>> For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@xxxxxxxxxxxxxxxx
For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx




[Index of Archives]     [Open SSH Users]     [Linux ACPI]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Squid]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux