• 1912阅读
  • 1回复

Apache运行异常问题 PHP Startup:  in Unknown on line 0

楼层直达
1、在启动apache时,出现如下警告: D!a5#+\C  
PHP Warning:  PHP Startup:  in Unknown on line 0 6QXQ<ah"  
kO_XyC4(  
没有其他信息了。 ;nKHm  
UX`DZb +^  
虽然暂时没有发现有什么影响,但是还是觉得不爽,要处理掉,先怀疑是扩展程序无法加载,一个个注释打开、启动,终于找到是加载php_curl.dll的问题。 gQ=POJ=G  
^;$a_$ |  
解决办法是: KzX ,n_`an  
xY'qm8V  
把php根目录下的libeay32.dll、ssleay32.dll copy to C:\WINDOWS\system32; (对于加载到IIS Isap情况?) O+p-1 C$\  
j8Q5d`  
重新启动apache,没有警告了。 aXbNDj ][  
04guud }  
20l_ay  
Wx?&igh  
2、如果安装的是包含ssl的版本,需要加载 >mFX^t_,  
P"9@8aLB  
LoadModule authz_core_module modules/mod_authz_core.so +*_fN ]M  
否则访问就会出现 ,t%CK!8  
EARfbb"SG7  
如下错误日记 1rv$?=Z  
S@c\|  
[mpm_winnt:notice] [pid 11332:tid 340] AH00354: Child: Starting 64 worker threads. O+o;aa6  
X"k^89y$  
3.1、网络名不再可用错误解决方法 s`#ntset0  
DhWWN>I  
          在httpd.conf里找到#EnableMMAP Off(禁用内存映射) }2Cd1RnS  
,TF<y#wed  
          #EnableSendfile Off修改成:EnableMMAP OffEnableSendfile OffAcceptFilter http noneAcceptFilter https none Sf'i{xye  
X:G& 5  
2 dd \bI_  
“Win32DisableAcceptEx”指令(For 2.2,2.4无效): Ii~; d3.  
#)_J)/h  
AcceptEx()是微软的WinSock2 API ,通过使用BSD的accept() API 提供性能的改善。很多Windows软件会干扰AcceptEx()操作。 C~ZE95g  
UsLh)#}h  
当遇到像下面的错误:[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.   BgJkrv7~  
oMh~5 W  
就需要使用这一个指令禁止使用AcceptEx() 。 Zk]k1]u*5  
hz< |W5  
关闭AcceptEx() 的同时也随着关闭了EnableMMAP和 EnableSendfile. @Pxw hlxa  
!Z U_,[  
3 ,dHP`j ?  
在Linux服务器上启用IPv6的时候,使用sendfile会触发网卡上的TCP校验和卸载的bug。当Linux运行在Itanium处理器上时,sendfile将无法处理2GB以上的文件。对于通过网络挂载NFS文件系统的DocumentRoot,内核将无法通过缓冲区服务到网络文件。当出现以上情况的时候,应该禁用sendfile:EnableSendfile Off针对NFS或SMB,这个指令可以被针对目录的设置覆盖:EnableSendfile Off lq1[r~  
PqT"jOF]n  
还是关闭这两个指令比较好一些。 +jp|Y?6Z  
8W-]t1O%!  
END TkA9tFi  
    注意事项 R `;o!B}[  
故障[warn] (OS 64)指定的网络名不再可用的解决办法主要是关闭AcceptEx对于另外两个指令可选则关闭。 ,q8(]n 4  
q^u1z|'Z  
hgj CXl  
3.2、Windows2003下换了Apache 2.2.8之后,发现访问网站特别慢且时断时续 0;vtdM[_  
q1UBKhpnH  
在error日志中发现以下记录: /M 0 p_4  
M6\7FP6G  
[Sat Dec 24 17:21:28 2008] [warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed. DX|uHbGg  
'w}p[(  
NzAQ@E 2d:  
----  Pass Test OK, Follow other idea is pool----- m+H%g"Zj  
hPcS, p{%  
EnableMMAP off mLJDxh'B  
EnableSendfile off 7 xUE,)?  
&uPDZ#C-  
解决办法: rrAqI$6  
在httpd.conf文件中启用如下扩展 R+s1[Z  
# Server-pool management (MPM specific) ~,T+JX  
Include conf/extra/httpd-mpm.conf vuZf#\zh}  
~*,Wj?~+7  
然后在httpd-mpm.conf中添加 Win32DisableAcceptEx 标记,如下: yu=piP  
# WinNT MPM 5.dl>,  
# ThreadsPerChild: constant number of worker threads in the server process Z&A0hI4d  
# MaxRequestsPerChild: maximum   number of requests a server process serves :Z[(A"dA  
5\&]J7(  
Win32DisableAcceptEx  (For 2.2,2.4无效) T RDxT  
ThreadsPerChild       150 L $SMfx  
MaxRequestsPerChild     0 "ct58Y@   
#v+;:  
重启Apache。 lM$t!2pRB  
cN5"i0xk  
bf(+ldq  
@gEr+O1K(  
3.3、Apache日志中:[warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed. n_}aZB3;U  
-zdmr"CA  
在apache配置文件中添加如下语句: c@9##DPn  
? #n#HzbT  
<IfModule mpm_winnt.c> ZL,8,;]  
ThreadsPerChild 1000 y] y9'5_  
MaxRequestsPerChild   10000 6uqUiRs()  
Win32DisableAcceptEx  (For 2.2,2.4无效) { m'AY)  
</IfModule> e,"FnW  
停止Apache,再启动。 E<k ^S{  
Se Oy7  
#2N_/J(U  
3.4、参数注释 _@K YF)  
3daC;;XO  
一般来说,WinNT系统下使用IIS,而Apache在Linux下应用的比较多,但是依然有很多人在WinNT系统下使用Apache而非IIS,可能是基于对Windows系统的熟悉吧。今天就来说一下在Windows系统下如果优化Apache的性能。 %I0}4$  
1yS&~ y?a  
mpm_winnt.c 是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说 mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。 t#~XLCE  
V:>`*tlh  
87}(AO)  
mpm_winnt主要通过ThreadsPerChild和MaxRequestsPerChild两个参数来优化Apache,下面详细来说明一下。 lQ$+JX;n(y  
}lO }x  
ThreadsPerChild ?;RD u[eD  
E-F5y  
ckWkZ 78\  
这个参数用于设置每个进程的线程数, 子进程在启动时建立这些线程后就不再建立新的线程了. 一方面因为mpm_winnt不能启动多个进程, 所以这个数值要足够大,以便可以处理可能的请求高峰; 另一方面该参数以服务器的响应速度为准的, 数目太大的反而会变慢。因此需要综合均衡一个合理的数值。 ;W~4L+e  
AK;^9b-}q:  
mpm_winnt上的默认值是64, 最大值是1920. 这里建议设置为100-500之间,服务器性能高的话值大一些,反之值小一些。
只看该作者 安逸沙发  发表于: 2017-04-25
MaxRequestsPerChild S7v# `#  
%\f<N1~*  
]mR!-Fqj  
该参数表示每个子进程能够处理的最大请求数, 即同时间内子进程数目.设置为零表示不限制, mpm_winnt上的默认值就是0. /1BqC3]tL  
7lUnqX.  
官方参考手册中不建议设置为0, 主要基于两点考虑: (1) 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存; (2) 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。 6DuA  
[QDM_n  
因此这个参数的值更大程度上取决于服务器的内存,如果内存比较大的话可以设置为0或很大的数字,否则设置一个小的数值。需要说明的是,如果这个值设置的太小的话会造成Apache频繁重启,在日志文件中会看到如下的文字: U[O7}Nsb"  
{i"t h(J$  
    Process exiting because it reached MaxRequestsPerChild. Signaling the parent ^Lc, w  
"1wjh=@z  
这样一来降低了Apache的总体性能。 K+<F, P  
另外,可以通过查看Apache提供的server-status(状态报告)来验证当前所设置数值是否合理,在httpd.conf文件中做如下设置来打开它: TCI)L}L|  
T+j-MR}{\  
# 首先需要加载mod_status模块 ^wlo;.8Y  
LoadModule status_module modules/mod_status.so LEd@""h  
-Oplk*  
# 然后设置访问的地址 lobC G  
,5}")T["u  
   SetHandler server-status D[0g0>K  
   Order deny,allow SnVb D<  
   Deny from all xM:9XhH1  
    # 如果限制某个IP访问则设置为 Allow from 192.168.1.1 wBz5_ OFVw  
    Allow from all 综合来说,因为Windows NT下Apache只能启动父子两个进程,因此只能通过增大单个进程的线程数以及单个进程能够处理的最大请求数来进行优化。其他优化的参数同Linux系统下是一样的,大家可以加以参考。下面针对上述两个参数给出一个建议的设置: 534DAhpD=.  
[5-3PuT&9  
ThreadsPerChild 250 y4%[^g~-  
MaxRequestsPerChild 5000 ~j yl  
r*g<A2g%  
nEgYypwr  
4、在Error.log (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed. Gj&`+!\  
Rg7~?b-  
解决方法: >k8FUf(c  
J0 UF(  
Apache 关闭 AcceptEx() ,这个在Windows平台下适用 ~m&q@ms&  
;uaZp.<um&  
方法是在 httpd.conf 内加入 Win32DisableAcceptEx 。 6]fz;\DgP  
DS ^ `:^hv  
关闭AcceptEx() 的同时也关闭EnableMMAP和 EnableSendfile :xZ^Jq91  
~ekV*,R"  
具体的操作方法就是: PDhoCAh !  
6XI$ o,{  
在httpd.conf里找到 c}mWAZ=wF  
mH 9_HK.C  
#EnableMMAP Off iJ p E`  
#EnableSendfile Off GI)eq:K_U8  
?btZdnQ))S  
修改成 aUbmEHFTV  
<IfModule mpm_winnt.c> \kG;T=H  
Win32DisableAcceptEx (For 2.2,2.4无效) wD5fm5r=  
EnableMMAP Off h.)o4(bO  
EnableSendfile Off b>f{o_  
ThreadsPerChild 1700 Mc<O ~  
MaxRequestsPerChild 0 Gk]6WLi  
</IfModule> >rid3~  
然后重新启动动 Apache,“指定的网络名不再可用”再也不出现了 #?fKi$fS;L  
]OLe&VRix  
Q=#N4[W'  
------------------------------------------- PiF&0;  
W \XLf,_+  
上面那样关闭AcceptEx,也会出现类似问题,Apache还是不能正常运作,error.log 出项了大量的:Sat Dec 24 17:21:28 2006] [warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed.。发现了如下的一种解决办法试了可以,而且在多台服务器上试过,只要出现了AcceptEx 的问题,就能解决, y-lBaTE9  
i^hEL2S/A  
具体设置为: sU0W)c;  
MP$9W)  
1、网上邻居-;本地连接-;属性-;internet协议(TCP/IP)-;属性-;高级-;wins标签-;去掉启用LMhosts查询前的勾. (无效) \JbOT%1  
2、控制面版-;windows防火墙-;高级标签-;本地连接设置-;服务的标签里勾选安全Web服务器(HTTPS)。 .^V9XN{'a  
3、然后退出Apache,再打开启动就可以了 ,一般要先停止,在开启即可 Qz`v0"'w  
------------------------------------------- Cnv?0to2l  
q.!<GqSgb  
如果 还不管用, ]i Yp  
试下重置winsock T&+y~c[au  
命令行中执行:   EGxCNB  
^0HgE;4  
netsh winsock reset D+"+m%^>C  
;S+]Z!5LT  
xl ,(=L]  
4、 AH00127: Cannot map GET /uploads/info/\xd5\xd5\xc6\xac 073.jpg HTTP/1.1 to file Wgb L9'}B  
某些带有中文路径的图片 GD0Q`gWNe  
fVz0H1\J&  
1.在客户端访问时出现403错误 &vN^ *:Q  
X=jHH=</  
2.服务器报Invalid argument: Cannot map GET错误 11?d,6Jl  
}6!m Q  
通过开启indexes,可以正常访问到图片文件。反现encode后结果不同 P (aN6)D  
这是由于urlencode  不同的编码转换时产生的结果也不同 -+y3~^EYm,  
WSbD."p<  
}U@(S>,%  
apache 默认采用utf8 w+gPU1|(r  
+}iuTqu5  
但是程序在编写页面过程中 ,c|Ai(U  
)yUSuK(Vu  
urlencode(iconv("utf-8","gbk"....)) ,:8 oVq>?  
AI]lG]q8  
转成了gbk,需把它再转换回utf-8
快速回复

限100 字节
安逸网提示:如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
认证码:
上一个 下一个