文件名是“foobar.php”。其内容如下:
<?php
echo "hello world";
但是当我尝试进入 example.com/foobar.php 时,我得到了
DNS 203毫秒
连接3.33秒
发送0毫秒
到第一个字节的时间17.35秒
接收1毫秒 总加载时间20.88秒
然后我把另一个名为“foobar.txt”的文件。其内容如下:
hello world<br/>
foobar.txt 的加载时间约为0.2秒。
此网站位于共享主机内部,因此无法获得root Linux访问权限。我试图找出是什么让我的网站变慢。
MaxClients 300
MaxRequestsPerChild 4000
ThreadsPerChild 25
新编辑: 我和我的托管公司谈过。并告诉他们“foobar.php”几乎在20秒内打开。虽然该文件根本没有代码。他们告诉我他们把“foobar.php”放到我们使用同一台服务器的其他网站上。我也试过“othersite.com/foobar.php”。它立刻打开了。但“mysite.com/foobar.php”几乎在15秒内开启。什么会造成这种行为?我们对其他网站使用相同的PHP配置,但它们会立即打开.. 可以是因为我的.htaccess规则吗?或者其他什么?
新编辑2: 我的提供商告诉我服务器内没有“apd.so”文件。所以我好像不能使用APD。
我应该寻找什么才能找到瓶颈? 什么会限制我的网站?
其他数据:来自phpinfo,我明白了:
'./ configure'' - prefix = / usr / local / lsws / lsphp5' '--build = x86_64-redhat-linux-gnu'' - host = x86_64-redhat-linux-gnu' '--target = x86_64-redhat-linux-gnu'' - sysddir = / etc' '--datadir = / usr / share'' - includenid = / usr / include' '--libdir = / usr / lib64'' - libdcdir = / usr / libexec' '--localstatedir = / var'' - sharedstatedir = / usr / com' '--mandir = / usr / share / man'' - infodir = / usr / share / info' '--cache-file = .. / config.cache'' - with-libdir = lib64' '--with-配置文件中路径= /等' '--with-config-file-scan-dir = / etc / php.dd'' - disable-debug' '--with-pic'' - disable-rpath'' - without-pear'' - with-bz2' '--with-curl'' - with-exec-dir = / usr / bin'' - with-freetype-dir = / usr' '--with-png-dir = / usr'' - without-gdbm'' - with-gettext'' - with-gmp' '--with-iconv'' - with-jpeg-dir = / usr'' - with-openssl' '--with-libexpat-dir = / usr / lib64'' - with-pcre-regex = / usr' '--with-zlib'' - with-layout = GNU'' - enable-exif'' - enable-ftp' '--enable-magic-quotes'' - enable-sockets'' - enable-sysvsem' '--enable-sysvshm'' - enable-sysvmsg'' - enable-wddx' '--with-kerberos'' - enable-ucd-snmp-hack' '--with-unixODBC = shared,/ usr'' - enable-shmop'' - enable-calendar' '--with-libxml-dir = / usr'' - with-mysql'' - with-mysqli'' - with-gd' '--enable-dom'' - disable-dba'' - without-unixODBC' '--enable-xmlreader'' - enable-xmlwriter'' - with-mcrypt' '--enable-mbstring'' - with-litespeed'' - enable-soap'' - with-xsl' '--with-pdo-mysql'' - with-pdo-sqlite'' - enable-sqlite-utf8' '--with-pspell'' - with-sqlite = shared'' - with-xmlrpc'' - with-mhash' '--enable-pdo'' - with-imap'' - with-imap-ssl'' - without-suhosin' '--with-tidy'' - enable-zip'' - enable-inline-optimization' '--enable-gd-native-ttf'' - enable-bcmath'
答案 0 :(得分:6)
似乎很明显是一个PHP问题,因为Apache在提供静态文件方面没有问题。您是否尝试过从PECL安装APD?
使用像APD这样的PHP分析器将向您展示瓶颈是否在PHP中,如果是,它将在何处。例如,你正在使用的框架是否缓慢?或者只是一个流氓扩展?
从官方manual解释:
使用APD,您只需在入口点添加一条指令:
<?php
apd_set_pprof_trace();
?>
APD会将分析信息转储到* apd.dumpdir / pprof_pid.ext *。
然后, pprofp 将使用您的转储文件并告诉您哪些方法正在缩短响应时间:
bash-2.05b$ pprofp -R /tmp/pprof.22141.0
Trace for /home/dan/testapd.php
Total Elapsed Time = 0.00
Total System Time = 0.00
Total User Time = 0.00
Real User System secs/ cumm
%Time (excl/cumm) (excl/cumm) (excl/cumm) Calls call s/call Memory Usage Name
--------------------------------------------------------------------------------------
100.0 0.00 0.00 0.00 0.00 0.00 0.00 1 0.0000 0.0009 0 main
56.9 0.00 0.00 0.00 0.00 0.00 0.00 1 0.0005 0.0005 0 apd_set_pprof_trace
28.0 0.00 0.00 0.00 0.00 0.00 0.00 10 0.0000 0.0000 0 preg_replace
14.3 0.00 0.00 0.00 0.00 0.00 0.00 10 0.0000 0.0000 0 str_replace
如果您看到的延迟都没有显示在配置文件中,则表明它是系统范围的PHP配置问题(可能是流氓或配置错误的扩展)。但我猜它是框架中的东西。
答案 1 :(得分:4)
您在编写此问题时,您有几个客户端每3秒执行一次AJAX请求。这使得服务器上可用的所有PHP工作程序都可能被这些AJAX请求阻止。您的Web服务器收到/foobar.php
的请求,然后必须等到PHP工作人员可以自由处理您的请求。
因此,对于您的问题可能的解决方案是(没有您更具体的AJAX需要,我需要保持这一般):
header("Connection: close");
(尽管这可能还不够,请检查PHP manual about connection handling上的注释)一般情况下,您需要提供商帮助解决此问题。您没有编写提供程序用于提供PHP的方法,例如使用fpm,有一个名为process.max
的设置可以限制您的Web服务器并行处理这么多PHP文件的能力。
答案 2 :(得分:3)
如果没有您的提供者的合作,您就没有机会找出问题所在。
我建议它类似于磁盘io会话问题。
另一个有趣的观点是您的提供者使用: http://www.litespeedtech.com/php-litespeed-sapi.html 从来没有听说过那个bevore。
如果您的提供商会对mjk建议您的内容,您应该只是更改您的提供商。 接缝是因为他们没有受到控制。
答案 3 :(得分:2)
如果同一个空PHP文件在移动到另一个站点时立即加载,则不能归因于任何框架或包含的文件,因为此时已加载了非文件。
它可能是php或Apache端的配置问题,也可能是由重写规则引起的。我建议尝试以下方法:
1。)如果允许每站点PHP设置,请要求托管公司将您的特定php.ini重命名为其他名称,从另一个站点复制php.ini并重新启动Apache,看看是否有帮助。我在Windows上遇到了类似的问题,这是由于php.ini上的文件访问问题所以这可能会有所帮助。
2.。)暂时重命名.htaccess并再次访问php文件。如果加载时间减少,您将有一个错误的重写条件或其他指令。你也可以发布.htaccess的内容吗?