Apache2 未启动我的网络服务器

Apache2 未启动我的网络服务器

因此我运行这个命令:

/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)

相关内容