So I run this command:
/etc/init.d/apache2 start
And it says:
* Starting web server apache2 [ OK ]
But! My website still doesn't pull up. And!
service --status-all
[ - ] apache2
Whaattt....? What's goin' on? ;(
[Sat May 01 14:45:18 2010] [warn] pid file /var/run/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
[Sat May 01 14:45:18 2010] [notice] Apache/2.2.11 (Ubuntu) PHP/5.3.2 configured -- resuming normal operations
[Sat May 01 14:45:18 2010] [alert] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread
[Sat May 01 14:45:18 2010] [alert] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread
[Sat May 01 14:45:20 2010] [alert] No active workers found... Apache is exiting!
On Linux, this is usually due to high ThreadsPerChild + high or unlimited ulimit -s.
On Linux, the default stack size for each thread is ulimit -s value or 8-10 megabytes -- Apache needs about 512 kilobytes of stack space or less under normal use.
This quickly overruns either 32-bit address space size with TPC near 200+, or if you have system memory limits you can run afoul of them as well.
Set ulimit -s 512 in your "envvars" file shipped alongside apachectl -- note that ThreadStackSize does not help here because that sets a minimum.
Is this a new Installation or was it previously stable and cannot start back up?
Insufficient memory could be the cause although a "(12)Cannot allocate memory: apr_thread_create: unable to create worker thread" should display if thats the case.
It's more likely that you are exceeding PTHREAD_THREADS_MAX setting within your OS. You could increase that, or lower ThreadsPerChild within Apache.
You are likely using the "Worker" distribution of Apache, the "prefork" may be more appropriate because it uses 1 thread per process, vs "worker" which uses many threads per process.
Sources:
Take a look at the logs, especially the error_log. That should help. If it doesn't help, try to strace the apache2 command:
strace -f -o output.txt /etc/init.d/apache2 start
strace will trace the system calls (the -f flag orders strace to follow child processes as well and the -o flag writes the output to the file output.txt)