问题 我试图在我正在开发的Drupal网站上诊断性能问题。 在早上,当网站超过8小时没有stream量(甚至没有cron运行),首页需要大约3.5秒的时间加载。 重新加载页面需要250ms。 这是一个开发Web服务器,安装了相当旧的PHP版本(5.3.3)。 所有的文件都通过NFS静态挂载 (我相信这是根本原因,更多的在下面)。 为了帮助诊断,我在此开发服务器上安装了XHProf ,并启用了一个Drupal模块,用于configuration页面加载并将分析数据显示在一个很好的可sorting表格中。 对于那些不熟悉XHProf的人来说,它提供了每一个被调用的函数的数据,以及诸如花费的总时间,内存使用量以及对这个函数的调用等。 我的发现 在最初的“慢”命中,PHP函数file_exists从82个调用中花费1400ms ,占总执行时间的大约43%。 在随后的页面加载中,相同的函数file_exists再次被调用了82次,但是这一次仅仅是3ms ,仅占总执行时间的1%。 我另外看了PHP花费最长时间加载到内存中的文件(这是我认为load:: prefix表示函数名)。 这个PHP模板文件花了高达42毫秒来加载第一次,只有3ms在随后的重新加载! 我怀疑 对我来说很清楚,某处存在某种caching – 我只是不知道在哪里。 file_exists的PHP文档提到这个函数的输出被caching了。 然后我发现我可以控制这个caching的大小,它应该从默认的16k增加到更适合Drupal(加载相关文件吨)的东西。 但是,虽然我认为这会减less花费在file_exists的时间,但我不确定这会影响PHP实际加载文件的时间( load::我之前提到过),增加这个值似乎只是隐藏文件系统的基本性能问题。 问题 如果有任何XHProf或PHP退伍军人,可以确认增加的PHP的realpath_cache是否对load:: from XHProf报告的时间有任何影响? 我应该在Linux中意识到哪些底层caching机制可能会产生影响? 同上,但对于NFS?
我们有NGinX作为PHP Web应用程序的代理服务器。 PHP脚本由PHP-FPM进程提供。 以下是nginx的configuration: location /app/ { alias /var/www/html; location ~* \.(js|css|png|jpg|jpeg|gif|ico|eot|svg|ttf|woff)$ { alias /var/www/html; expires 24h; log_not_found on; try_files $uri $uri; } rewrite /app.* /app/index.php?$args; location ~ \.php$ { try_files $uri =404; # typical php-fpm configuration } } # wordpress site hosted on root of the domain location / { try_files $uri $uri/ /index.php?$args; […]
我们在Apache 2.2 mysql5.5上运行Drupal 6.26,PHP 5.3。 Prodnetworking服务器有两个PROD应用服务器运行loadbalancer。 Prodnetworking服务器使用100%的CPU下载了httpd.exe。 下面是崩溃转储的摘录。 这是Apache挂起的线程。 . 0 Id: 126c.c20 Suspend: 0 Teb: 7efdd000 Unfrozen ChildEBP RetAddr 000cfd60 765615e9 ntdll!ZwWaitForMultipleObjects+0x15 000cfdfc 762319fc KERNELBASE!WaitForMultipleObjectsEx+0x100 000cfe44 762341d8 kernel32!WaitForMultipleObjectsExImplementation+0xe0 000cfe60 6ff1dc10 kernel32!WaitForMultipleObjects+0x18 WARNING: Stack unwind information not available. Following frames may be wrong. 000cfe9c 6ff20655 libhttpd!ap_regkey_value_remove+0x710 000cfec4 004017c7 libhttpd!ap_mpm_run+0x1c5 000cff14 00401f73 httpd+0x17c7 000cff88 7623336a httpd+0x1f73 […]
在Windows上运行Apache 2.2可以运行PHP 5.5.9吗? PHP 5.5.9包只包含php5apache2_4.dll模块,这显然不适用于Apache 2.2。 我无法通过search查找模块。
我在httpd.conf中设置了一个虚拟主机。 虚拟主机正确parsing,但它忽略了我的php_includepath指令: php_value include_path .:/var/www/xxx/library/ path工作,我复制并粘贴到一个LS。 通常情况下,我会追求更进一步的,但error_log显示我这个错误: PHP Fatal error: require_once(): Failed opening required 'api/v1/xxx.php' (include_path='.:/usr/share/pear:/usr/share/php') 所以,它甚至不在正确的位置。 虚拟主机中的其他一切都很好,只是没有正确地使用PHP的include_path。 任何指针?
我一直有一些内存不足的问题。 调整Apache之后,还有很多,但是在分析内存使用情况时我注意到了一些奇怪的地方 php-fpm在后台运行,据我所知,运行mod_php时没有用处。 我有一个很好的谷歌,但无法find任何关于这个问题。 使用mod_php (带有Suhosin-Patch的PHP版本:5.3.10-1ubuntu3.9)运行Apache / 2.2.22 ob Ubuntu 12.04, 据我所知, php-fpm与mod_php无关,所以为什么要安装(我没有明确安装它),为什么它在后台运行,并有一种方法,我可以禁用它(和这样做是否安全)? 这是从顶部除外 670 mysql 20 0 721m 50m 7728 S 0.0 10.3 0:08.95 /usr/sbin/mysqld 6486 www-data 20 0 310m 34m 3512 S 0.0 7.1 0:00.30 /usr/sbin/apache2 -k start 6489 www-data 20 0 287m 12m 3832 S 0.0 2.4 0:00.03 /usr/sbin/apache2 -k start 6474 […]
我目前正在运行几个LAMP栈,我已经手动设置了PHP 5.2,5.3和5.4。 所有服务器都运行Ubuntu 12.04 LTS。 5.3目前通过apt-get安装,但所有其他PHP版本都是手工编译的。 我期望通过Puppet开始部署新的LAMP堆栈,尽pipe我可以编写一个基本的脚本来执行相同的编译步骤,但是我希望做得更好。 我已经包含了一些我之后的例子。 所有这些问题是,他们似乎是开发人员的重点,甚至在用户的homedir安装PHP。 我正在寻找可以在生产服务器上pipe理多个版本的PHP的东西。 我想我可以修改现有的解决scheme,但我希望能find一些更具特色的用户群体。 Boxen的木偶PHP模块: https : //github.com/mattheath/puppet-php (这取决于下面的phpenv): 在这里,我可以 include php::5_4 include php::5_3 include php::5_2 这最终是我想用我的Puppetconfiguration。 一些简单的线路,它会照顾安装,并检测版本是否已经存在,以免重新安装。 phpenv: https : //github.com/phpenv/phpenv 设置phpenv后: phpenv install php-5.3.20 php版本: https : //github.com/wilmoore/php-version
我有: CPU: 2 x Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz (2600.06-MHz K8-class CPU) 128 GB RAM FreeBSD OS session files stored in RAM each session file is 1…10 kb gc_maxlifetime = 1440 会话文件的数量是:21000(100M RAM) 当我将gc_maxlifetime to = 3600更改gc_maxlifetime to = 3600会话文件的数量改为:55000(250M RAM) 网站开放后,缓慢。 只有在将gc_maxlifetime更改为= 3600之后,才能开始缓慢工作。当gc_maxlifetime = 1440时,所有工作都完美无缺。 所以,这是因为大量的会话文件。 我应该怎么做,以使其工作更快?
我在Windows Server 2012 R2上使用IIS 8.5来托pipeASP.NET和PHP应用程序。 由于有几个不同的PHP应用程序,我想通过使用open_basedir来限制访问。 问题:使用IIS PHP-Manager无法为每个vHost使用不同的php.ini文件。 所以我find了一个自定义的解决scheme:PHPpipe理器添加了php-handler的赋值后,我修改了可执行文件如下: "C:\Program Files (x86)\PHP\v5.4.26\php-cgi.exe"|-c D:\Sites\my-domain.com 这是工作,vHost使用php.ini文件D:\ Sites \ my-domain.com \ php.ini。 但是这个解决scheme对我来说看起来有点脏。 有没有更好的方式为每个vHost设置一个php.ini文件?
我使用Nginx创build了一个VPS,并试图显示php信息: <?php phpinfo(); ?> <?php phpinfo(); ?> 。 相反,浏览器要求我下载php文件,而且它也没有被parsing。 这只发生在位于/var/www/我的VPS网站上。 位于默认/usr/share/nginx/html (由浏览器通过ip访问)中的相同的php文件显示OK(并且显示在浏览器中,而不是要求下载)。 这是我的configuration文件: virtual.conf # # A virtual host using mix of IP-, name-, and port-based configuration # server { listen 80; # listen *:80; server_name website.com www.website.com; location / { root /var/www/website.com/public_html/; index index.php index.html index.htm; } # pass the PHP scripts to FastCGI […]