我正在调整我的主页以提高性能,目前它在 3.14.by 上处理大约 200 个请求/秒,它处理 6 个 SQL 查询,在 3.14.by/forum(phpBB 论坛)上处理 20 个请求/秒。
奇怪的是,某些 VPS 和专用 Atom 330 服务器上的数字大致相同。
服务器软件如下:Apache2+mod_php prefork 4 childs(这里尝试了不同的数字)、php5、APC、nginx、用于PHP会话存储的memcached。
MySQL 配置为占用大约 30% 的可用 RAM(VPS 上约为 150Mb,专用服务器上为 700Mb)
看起来某处存在瓶颈,不允许我走得更高,有什么建议吗?(即,我知道执行少于 6 个 SQL 会使其更快,但这看起来不是一个限制因素,因为 sqld 由于缓存查询而在顶部的消耗不超过百分之几)
有没有人测试过踢预分叉的 apache2 并只留下 nginx+php 快得多?
更多基准
Small 40-byte static file: 1484 r/s via nginx+apache2, 2452 if we talk to apache2 directly.
Small "Hello world" php script: 458 r/s via ngin+apache2.
Run Code Online (Sandbox Code Playgroud)
更新: 似乎瓶颈是 MySQL 在缓存数据上的性能。带有单个 SQL 的页面显示 354req/sec,有 6 个 SQL - 180 …
我正在尝试在 redhat 上安装 apc,所以我做了:
pecl install apc
Run Code Online (Sandbox Code Playgroud)
我说是:
Use apxs to set compile flags (if using APC with Apache)? [yes]:
Run Code Online (Sandbox Code Playgroud)
我明白了:
checking for re2c... no
configure: WARNING: You will need re2c 0.9.11 or later if you want to \
regenerate PHP parsers.
Run Code Online (Sandbox Code Playgroud)
和
checking whether apc needs to get compiler flags from apxs...
Sorry, I was not able to successfully run APXS. Possible reasons:
1. Perl is not installed;
2. Apache was not compiled with DSO support (--enable-module=so); …Run Code Online (Sandbox Code Playgroud) 我正在一个新的 CentOS 服务器上工作,我非常恼火地发现 yum 不像 Ubuntu 上的“apt-get install”那样顺利和出色地工作。
安装 LAMP 堆栈,我运行了以下命令:
$ yum install php
$ yum install mysql
Run Code Online (Sandbox Code Playgroud)
此外:
$ yum install mysql-server
$ yum install mysql-devel
$ yum install php-mysql
Run Code Online (Sandbox Code Playgroud)
现在运行:
$ rpm -qa | grep php
Run Code Online (Sandbox Code Playgroud)
...表明我安装了各种 php 5.1.6 包,我至少需要 5.2。此外,我看到它安装了 mysql 5.0.77,即使当前版本是 5.5.20。但希望 mysql 5.0 会工作。PHP 5.1 不会。
所以真正的问题是(是):
如何修复我的 PHP 以使其成为最新的稳定版本(根据 PHP.net 为 5.3.9)?如何让我的 CentOS 机器更像 Ubuntu,这样我就不必再处理这个问题了?
非常感谢。
编辑:CentOS 5.7 上周由托管公司安装,所以我不知道他们为什么会安装旧版本的 CentOS,而不是最新版本。我至少需要 PHP 3.2,所以我很欣赏如何做到这一点的建议。我对软件包和存储库不是很熟悉,但似乎任何人都可以启动存储库,因此我担心从可能感染服务器的某个随机存储库安装东西。
我正在尝试创建一个为 PHP 脚本提供服务的网络服务器。目前,它的工作原理如下:
php index.phpphp从 STDOUT读取输出并将其返回给客户端除了参数没有传递给 PHP 脚本之外,所有这些都有效,因为:
var_dump($_GET);
Run Code Online (Sandbox Code Playgroud)
返回:
数组(0){}
$_GET调用时如何将参数传递给 PHP 二进制文件?
嗨,Apache 和 php 运行良好,但我在 php.ini 中所做的任何更改都没有效果,我什至删除了文件的所有内容,然后重新启动 Apache,并运行 phpinfo(),令人惊讶的是一切都继续正常运行。
我正在编辑的文件是出现在 phpinfo() 中的文件,如“加载的配置文件”。(/etc/php5/apache2/php.ini)
PS 我正在运行 Ubuntu 9.04 和 PHP 5.2
更多细节:
我用 sudo /etc/init.d/apache2 restart 重新启动,我也试过 sudo /etc/init.d/apache2 stop,然后启动,在重新启动时我得到:
“which php”没有产生任何结果。
我的 PHP 安装是使用 Synaptic Package Manager 完成的,选择“按任务标记包”,然后选择 LAMP 服务器。
我不知道该怎么做...
我有一个 Ubuntu 9.10 服务器。我已经使用 apt-get 命令安装了 apache2 和 php5。
如何安装php扩展?是否有像 apt-get 这样的命令来获取它们?或者我应该手动查找 php 网站上的文件并在 php.ini 中设置它们?
更具体地说,我需要 mcrypt、curl 和 gd。
谢谢
在一些服务器更改之后,我们的 PHP 配置被破坏了,这导致客户端的大型邮件列表在大约 4,000 个或更多地址中部分超时。我们希望尽可能避免发送重复邮件,并且我们有原始邮件列表。
邮件是使用 PHP 的mail()函数发送的,该函数使用sendmail,表示它正在使用Exim. 我见过命令:
sendmail -bp
Run Code Online (Sandbox Code Playgroud)
这给了我一个显示已发送的邮件列表。这个列表不是很大,而且可能是准确的(意味着脚本在只发送了一百封左右的电子邮件后就超时了)
是sendmail -bp获得此列表的最佳方式吗?
编辑:我mail.log在/var/log/mail.log或 via 中找不到任何文件locate mail.log,但 WHM 似乎对此有一些信息。
首先我知道这个变量: _SERVER["SERVER_SOFTWARE"]
在我的一个应用程序中,我想从 PHP 脚本中检查它正在运行的网络服务器。基本上它将是一个 wordpress 插件,它将帮助博主调整一些配置。
我为 Apache 和 Nginx 创建了单独的进程,并且还考虑将代码发布为 2 个不同的 wordpress 插件。
然后我很想知道 PHP 中是否有一种 FULLPROOF 方法可以完美地检测网络服务器。
请考虑所有情况 :: Apache、Nginx、Apache + Nginx、PHP 作为 Apache 模块、PHP 使用 fastcgi、php-fpm、lighttpd、IIS 等。
对于我的应用程序检测组合和代理是否存在也至关重要。
谢谢,
-拉胡尔
我真的很感激能帮助理解这种 Apache 行为。
我正在从应用程序/json 中的 iPhone Objective-C 应用程序与 PHP 通信。Gzip 压缩在服务器上启用,并由客户端请求。
从我的.htaccess:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/json
Run Code Online (Sandbox Code Playgroud)
对于小型请求,Apache 正在设置“Content-Length”标头。例如(这些值在 Objective-C 中从标头输出):
Connection = "Keep-Alive";
"Content-Encoding" = gzip;
"Content-Length" = 185; <-------------
"Content-Type" = "application/json";
Date = "Wed, 22 Sep 2010 12:20:27 GMT";
"Keep-Alive" = "timeout=3, max=149";
Server = Apache;
Vary = "Accept-Encoding";
"X-Powered-By" = "PHP/5.2.13";
"X-Uncompressed-Content-Length" = 217;
Run Code Online (Sandbox Code Playgroud)
X-Uncompressed-Content-Length是我添加的标头,设置为未压缩 JSON 字符串的大小。
如您所见,此请求非常小(217 字节)。
这是来自较大请求(282888 字节)的标头:
Connection = "Keep-Alive";
"Content-Encoding" = gzip;
"Content-Type" = "application/json";
Date = "Wed, …Run Code Online (Sandbox Code Playgroud) 在 Ubuntu 服务器上设置 Postfix 和 Apache/PHP。邮件现在可以使用正确的域名发送出去,但本地部分显示名称始终为“www-data”,因为我假设 Postfix 默认使用用户名。
在 php.ini 文件中,我能够更改为sendmail_path,sendmail_path = "/usr/sbin/sendmail -t -i -f support@example.com"但电子邮件显示名称仍显示为 www-data 。我尝试以几种不同的方式指定显示名称,但这被忽略了,邮件仍然作为 www-data 发出。
我希望能够做的是默认情况下,将任何缺少 from、return-path 等的邮件作为 发送出去"Example Support" <support@example.com>,但我不确定这是否可能。
php ×10
apache-2.2 ×6
linux ×2
nginx ×2
sendmail ×2
ubuntu ×2
centos ×1
cgi ×1
compression ×1
debian ×1
email ×1
exim ×1
gzip ×1
http ×1
mysql ×1
performance ×1
postfix ×1
redhat ×1
web-server ×1
yum ×1