Articles of php fpm

Apache + mod_php比Nginx + PHP-FPM慢4倍

我一直在Drupal 7网站进行基准testing,发现apache的页面执行速度比我创build的Nginx慢四倍。 由于这是页面执行时间,我的理解是,在执行完成之前,不会有其他任何页面资源请求,所以不太可能是由多个请求处理的方式引起的(我还应该提到,这些testing服务器只能被访问我)。 我尝试设置PHP-FPM与Apache一起工作,将其排除为可能的因素,但它只对约2%的页面执行时间产生影响。 每个服务器都运行Ubuntu 11.10,软件来自PPA,安装后只有最less量的configuration更改才能使服务器显示Drupal。 据我所知,这是我应该期待与这种设置相反。 Apache应该有一个优势,因为它不需要呼叫到外部服务,但是我看到的结果是大规模偏向于nginx。 有没有我看到的结果的任何解释? 有人可以提供我如何去确定原因的提示吗?

MySQL执行时间峰值

我今天突然遇到了MySQL问题。 细节: 操作系统:CentOS版本5.7 服务器types:运行在中等DV 4.0包上的Parallels virtuozzo容器 平均总内存使用量:<500MB 允许的总内存使用量:1GB(部分共享池只用于紧急情况,用户只能保证500MB) 处理器:> 1ghz 主要数据库大小使用最多:275MB和107MB 服务器堆栈:nginx 1.0.10,mysql 5.1.54,php 5.3.8和php-fpm innodb_buffer_pool_size = 100M php-fpm最大的孩子:5 Webapps:自定义的基于php的网站,magento和drupal 慢查询超时设置为1秒 我完成了诊断的步骤: 现在还不能重启容器 – 我今晚晚些时候我们国内的stream量会下降 启用mysql和php-fpm slowlog。 在php-fpm slowlog中发现数据库查询的函数时间超过1秒 在mysql slowlog中发现了一些简单的查询,花费1秒以上完成应该less于1秒。 最有趣的是 – 执行时间似乎有时会激增。 一个查询将花费几秒钟的时间,然后一次花费8秒来运行相同的查询。 这些结果已经通过mysql命令行运行原始SQL查询来validation。 顶部没有透露任何有趣的事情 只有资源相关的东西,我可以看到负载平均比正常高得多 直到今天,mysql已经很好,自从昨天以来,db一直没有大的变化。 有时候,事情太糟糕了,在60秒的执行时间之后,我看到了错误的网关错误。 Innodb的平均读取速度为300-1400次/秒。 Mysql正在做3-10查询/秒 在2小时内查询计数慢,正常运行时间为171(在1秒内缓慢超时) 试图重新启动mysql,nginx,php-fpm多次 例如: UPDATE `catalogsearch_query` SET `query_text` = 'EW 90', `num_results` = '7532', […]

Nginx / php-fpm进程属于不间断睡眠

我得到了关于服务器的nagios严重警告,当我检查ps -aux发现所有的nginx(php-fpm)都在不间断的睡眠中 www-data 1330 0.4 0.3 299992 108560? D 16:06 0:16 php-fpm:pool www www-data 1338 0.4 0.2 254728 92728? D 16:06 0:16 php-fpm:pool www www-data 1346 0.4 0.3 293544 100272? D 16:06 0:17 php-fpm:pool www www-data 1356 0.7 0.3 302504 101532? D 16:06 0:29 php-fpm:pool www www-data 1357 0.3 0.2 270672 85952? D 16:06 0:13 […]

Nginx和php-fpm在高负载下失败:“端口80可能发生SYN溢出”和“104:由对等端重置连接”

我有相当沉重的Web服务器使用: Ubuntu server nginx php-fpm + apc 昨天我的服务器发生了一些奇怪的事情。 它崩溃,并停止响应,并在我重新启动后,网页开始加载非常缓慢,在大多数情况下“请求超时”。 我检查了/var/log/syslog并看到了很多消息,例如: TCP: Possible SYN flooding on port 80. Sending cookies. 页面大约需要2分钟才能在本地加载: time wget -O /dev/null mysite.net –2012-12-21 13:17:15– http://mysite.net/ Resolving ficbook.net… 85.254.49.180 Connecting to mysite.net|85.254.49.180|:80… connected. HTTP request sent, awaiting response… 200 OK Length: 1311 (1.3K) [text/html] Saving to: `/dev/null' 100%[========================================================================================================>] 1,311 –.-K/s in 0s 2012-12-21 […]

Linux上的许多php-fpm进程的开销?

我正在迁移使用PHP-FPM运行PHP应用程序的web服务器的configuration。 服务器上有大约40-50(并且增长)的虚拟主机。 该服务器是一个1GB RAM的单CPU虚拟机。 虽然这不是一个可以玩的资源,但我确实有很多这样的负载均衡器,他们宁愿横向扩展而不是垂直扩展。 以前的configuration使所有虚拟主机运行在同一个用户下运行的单个PHP-FPM池中。 最大的孩子是20左右,服务器似乎应付(它总的来说,每天大约10万点击 – 不是巨大的stream量)。 考虑到这些网站的隔离,我正在考虑转移到一个模型,其中每个虚拟主机都有自己的PHP-FPM池,在该网站的特定用户下运行,然后将该池根据虚拟主机的根目录进行chroot。 然而,即使在保守的游泳池儿童设置(初始= 2),闲置时也会产生近100个FPMstream程。 我的问题是:这是否会导致问题? 是否有任何固有的内存问题,旋转这么多的进程? 最后的奖金问题:任何ulimit暗示为php-fpm如果我去做这个方法?

是否有可能告诉nginx通过fastcgi通过一个连接:closures标题通过未改变?

TL; DR :如何告诉nginx从我的php-fpm后端到a)发送一个“Connection:close”标题和b)不缓冲我的回应? 我有一个运行在nginx后面的php-fpm。 一般来说,这样做效果很好,我对此感到满意,但是有几个脚本非常希望向客户端浏览器发送一个“Connection:close”头文件(一个确保一个全新的连接到达HAProxy ),一个是为了能够响应客户端不能处理分块传输编码(.NET有一个错误)。 现在,如果我在PHP中这样做: <?php header('Connection: close'); echo "foobar"; 并尝试curl,我得到这个: curl -I http://localhost/foo.php HTTP/1.1 200 OK Server: nginx/1.1.19 Date: Tue, 19 Feb 2013 08:07:03 GMT Content-Type: text/html Connection: keep-alive X-Powered-By: PHP/5.4.11 正如你所看到的,“closures”已经变成了“保持活力”。 但不仅如此:显然,nginx也会caching这个响应并一次性发送(通过发送大量数据,睡眠,发送更多的数据来确认)。 看看这个文档,我发现了在这里代理的“X-Accel-Buffering”头文件。 这个头看起来应该是做我想要的东西(好吧,它不能解决连接头问题,但至less应该停止缓冲),但是,唉,没有运气 <?php header('Connection: close'); header('X-Accel-Buffering: no'); echo "foobar"; curl -I http://localhost/foo.php HTTP/1.1 200 OK Server: nginx/1.1.19 Date: Tue, […]

在Ubuntu 12.04上configuration和安装PHP 5.3.21时出错

我试图在运行Ubuntu 12.04的Rackspace云服务器上安装PHP 5.3.21,但是在configuration过程中我仍然遇到错误。 它不断给我以下错误: configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation. 这是我的PHPconfiguration脚本: ./configure –enable-fpm –enable-cli –with-fpm-user=phpfpm –with-fpm-group=phpfpm –prefix=/usr/local/php –exec-prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc –with-config-file-scan-dir=/usr/local/php/etc/conf.d –with-libdir=/lib/x86_64-linux-gnu –enable-bcmath –enable-ctype –with-curl –with-curlwrappers –with-pear –enable-dba –with-cdb –enable-exif –enable-ftp –disable-fileinfo –with-gd –with-jpeg-dir –with-png-dir –with-zlib-dir –with-xpm-dir –with-freetype-dir –with-t1lib –enable-gd-native-ttf –with-gettext –with-gmp –with-imap=/usr/local/c-client-2007f –with-imap-ssl –with-ldap –with-ldap-sasl –enable-mbstring=all –with-mcrypt –with-mhash –with-mysql […]

连接超时NGINX php-fpm mail()

我正在从Apache服务器和NGINX服务器移植一个PHP站点。 首先,我将摆脱apache以避免任何问题: # service httpd stop # yum erase httpd* 现在我要安装php-fpm所以我可以通过NGINX扩展phpfunction: # yum install php-fpm 让我们确保php-fpm在正确的用户下运行: # ps aux | grep apache apache 1658 0.0 0.5 222552 5316 ? S 20:41 0:00 php-fpm: pool www apache 1659 0.0 1.0 227268 10536 ? S 20:41 0:00 php-fpm: pool www apache 1660 0.0 1.0 227268 10420 ? […]

Nginx没有正确的遵循符号链接

我试图自动化我的部署过程,我有这个奇怪的问题。 我的Web应用程序的每个新版本都放置在/var/www/releases/{timestamp} 。 在执行git clone到该目录后,我build立了一个符号链接到/var/www/current 。 然后我执行service nginx reload 。 这种方法被许多部署工具所使用,并且被深思熟虑。 问题是,当我去网页浏览器查看更改并刷新多次,我可以看到两个版本(当前和以前)交替几秒/分钟。 一段时间后,它只能稳定在当前的版本。 有人知道可能是什么原因造成这个问题吗? 谢谢

CakePHP和WordPress上的Nginx PHP-FPM

我试图在同一台服务器上configurationCakePHP和一个WordPress的博客。 CakePHP在这里: http : //site.com/ WordPress的博客在这里: http : //site.com/blog/ 什么工作:整个CakePHP应用程序,并去/博客/。 什么不行:去/ blog / permalink /。 它提供了一个CakePHP 404页面。 / blog /可以使用或不使用下面的“#Blogconfiguration”。 我如何使/博客/永久链接/工作? 我习惯与Apache合作。 编辑:有人build议,我的问题是这篇文章的副本,但如果我使用该解决scheme或我的解决scheme(评论#博客configuration)下面给我一个CakePHP 404页面。 这意味着/ blog / permalink /不会击中wordpress的index.php。 upstream backend { server unix:/var/www/apps/appname/tmp/php.sock; } server { listen 80 default; root /var/www/apps/appname/public/app/webroot; index index.php index.html index.htm; server_tokens off; access_log /var/www/apps/appname/logs/access.log; error_log /var/www/apps/appname/logs/error.log; client_max_body_size 20M; rewrite_log […]