因此我运行这个命令:
/etc/init.d/apache2 start
上面写着:
* Starting web server apache2 [ OK ]
但是!我的网站仍然无法打开。而且!
service --status-all
[ - ] apache2
啥……?发生什么事了? ;(
[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!
答案1
在 Linux 上,这通常是由于 ThreadsPerChild 较高 + ulimit -s 较高或不受限制造成的。
在 Linux 上,默认每个线程的堆栈大小是 ulimit -s 值或 8-10 兆字节 - Apache 在正常使用情况下需要大约 512 千字节或更少的堆栈空间。
这很快就会超出 32 位地址空间大小(TPC 接近 200+),或者如果您有系统内存限制,您也会违反它们。
在与 apachectl 一起提供的“envvars”文件中设置 ulimit -s 512 - 请注意,ThreadStackSize 在这里没有帮助,因为它设置了一个最小值。
答案2
这是一个新安装吗?还是之前已经稳定并且无法重新启动?
内存不足也可能是原因所在,但如果是这种情况,则会显示“(12)无法分配内存:apr_thread_create:无法创建工作线程”。
更可能是您超出了操作系统中的 PTHREAD_THREADS_MAX 设置。您可以增加该值,或者降低 Apache 中的 ThreadsPerChild。
您可能正在使用 Apache 的“Worker”发行版,“prefork”可能更合适,因为它每个进程使用 1 个线程,而“worker”每个进程使用多个线程。
资料来源:
答案3
查看日志,尤其是 error_log。这应该会有所帮助。如果没有帮助,请尝试 strace apache2 命令:
strace -f -o output.txt /etc/init.d/apache2 start
strace 将跟踪系统调用(-f 标志命令 strace 也跟踪子进程,-o 标志将输出写入文件 output.txt)