Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm running Apache on a dedicated Windows 2008 server with a back-end process connected to Apache via FASTCGI. The back-end process is actually a game engine. Everything is working fine but I've noticed that things start to slow down when I have about 50 users hitting the server (which translates to about 25 HTTP requests per second). When I look at the Task Manager the CPU usage is between 1% and 5%.

So I'm looking for clues as to where to look to figure out why my response time is degrading even though the CPU doesn't seem to be anywhere close to maxed out.

share|improve this question
1  
Disk I/O, network I/O, and memory would be the next things to look at after CPU. –  David Schwartz Nov 8 '11 at 7:25
    
Is your server accessing other resources on another server like database? The bottleneck can be another server in this case. –  Khaled Nov 8 '11 at 17:56
    
All of those things seems to check out fine. Thanks for the suggestions though. –  Joe Rice Nov 9 '11 at 2:21
add comment

2 Answers

Turns out it was an Apache configuration issue. The default number of threads per child process is 64 (at least on Windows). Setting the ThreadsPerChild to a higher number fixed the problem. I've set it to allocate 1500 threads per child which uses about 100 MB of RAM - well worth it.

share|improve this answer
add comment

try apachetop

also think about using a unix system if you need performance, scaleability and reduced costs (in licences) . However you will need to pay for technical knowledge..it's not point and click after all ;-)

you can developed the clients in windows or whatever.

http://en.wikipedia.org/wiki/Nginx

which is optimised for concurrency.

more reading is here

http://www.kegel.com/c10k.html which is a bit old, there is a updated version i can't find at the moment.

seeing as this is a game engine, then i presume you client need constant http connection, rather the setup/tear down tcp connections.

you may be able to tune windows to do the job, but once your game scales your going to have problems.

i have some spare cycles, and like games. so pm if you want some 1 on 1 help.

share|improve this answer
    
nginx looks good. I was thinking I might migrate to that at some point but I was hoping I could scale up to maybe 400-500 users with my current architecture. My http connections use keep-alive, of course, and since the client makes a request every 2 seconds I'm assuming the connections are effectively constant. Thanks for the offer of help - if I can't figure it out in the next few days I might take you up on it. –  Joe Rice Nov 9 '11 at 2:18
    
Figured it out - had to set ThreadsPerChild in the Apache config file to a higher number. Thanks for your help. –  Joe Rice Nov 9 '11 at 22:49
    
great, there are many apache tuning guides out there, for general performance and optimisation problems , find out where the bottle neck is, measure, baseline, and stress test. Once you have this data then tune accordingly. it's not good adding ram for instance, if your cpu bound. You'll find unix based system give you a lot more control of these parameters. –  The Unix Janitor Nov 10 '11 at 9:36
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.