- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们目前有一个 Nginx 服务器设置,带有 PHP-FPM 和 APC 用于缓存。它被设置为运行一个中等负载的网站,我们希望强调网站加载时间,因为他们的整个业务严重依赖网站(在线预订)。
规范是:1个中央处理器,1GB内存,Ubuntu 12.04 长期支持版,Nginx 1.1.19,PHP-FPM 5.3.10
它已经可以正常工作很长一段时间了(大约 1 年)。
但是我们需要设置一个拆分测试环境来测试网站的新版本。由于我们无法在不同的代码片段之间交替(使用 CMS 并且数据库结构也发生了变化),我们决定使用子域并将 20% 的流量发送到子域。
为了实现这一点,我们简单地创建了一个新的服务器 block ,并在一个新文件夹中完全独立地设置了新站点。然后在原始服务器 block 文件中,我们使用 nginx 拆分客户端来设置 cookie 并在该百分位数中重定向到"new"。
我们认为只在主/旧网站上执行此操作很好,因为他们的所有流量都来自 Google,并且不太可能在测试期间成为重复客户,因此有人直接访问"new"的可能性是非常低,不会影响结果
一开始它运行良好,但几天后我们开始收到一些关于加载时间慢的投诉。经过一些调试后,只有流量前往"new"并且只是间歇性的。此时原始站点完全没有受到影响。
我们已经慢慢地禁用了试图解决问题所在的功能,但我们找不到问题所在。拆分测试已暂时禁用,事实证明,即使您尝试直接加载子域,它有时也会有非常慢的初始响应(大约 20 秒)。
起初我认为这可能是一个缓存问题,所以我们完全禁用了 APC,但它并没有解决问题。我们确实曾在某一时刻启用了 fastcgi 缓存以尝试加快速度,但这在很久以前就被禁用了。
我们还有其他几台设置非常相似的服务器,所以我正在努力寻找问题所在。
这里是文件片段
Nginx.conf
user www-data;
worker_processes 1;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
send_timeout 60;
include /etc/nginx/mime.types;
default_type application/octet-stream;
#fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache:10m max_size=100m inactive=60m;
#fastcgi_cache_key "$scheme$request_method$host$request_uri";
##
# Logging Settings
##
access_log off;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
gzip_buffers 16 8k;
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 5;
open_file_cache_errors off;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
站点 1/原始
split_clients "app${remote_addr}${http_user_agent}${date_gmt}" $upstream_variant {
20% "new";
* "original";
}
map $cookie_split_test_version $upstream_group {
default $upstream_variant;
"new" "new";
"original" "original";
}
geo $internal_request {
xxx.xxx.xxx.xxx 1;
default 0;
}
server {
listen 80;
server_name domain.com otherdomain.com$
return 301 $scheme://www.domain.com$request_uri;
}
server {
listen 80;
listen 443 ssl;
add_header Set-Cookie "split_test_version=$upstream_group;Path=/;Max-Age=3600;";
if ($upstream_group = "new") {
set $test_group 1;
}
if ($test_group = 1) {
return 301 $scheme://new.domain.com$request_uri;
break;
}
ssl_certificate path/to/ssl;
ssl_certificate_key path/to/sslkey;
ssl_session_timeout 5m;
ssl_protocols TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
root /var/www/domain.com/httpdocs;
index index.php index.html index.htm;
server_name www.domain.com
client_max_body_size 2M;
location / {
try_files $uri @website;
}
location @website {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root/framework/main.php;
fastcgi_param SCRIPT_NAME /framework/main.php;
fastcgi_param QUERY_STRING url=$uri&$args;
fastcgi_param ENVIRONMENT production;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 64k;
}
///other location directives
expires 2w;
}
站点 2/新
server {
listen 80;
listen 443 ssl;
root /var/www/domain.com/subdomains/new;
index index.php index.html index.htm;
server_name new.domain.com
ssl_certificate path/to/ssl;
ssl_certificate_key path/to/sslkey;
ssl_session_timeout 5m;
ssl_protocols TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
client_max_body_size 2M;
location / {
try_files $uri @website;
}
location @website {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root/framework/main.php;
fastcgi_param SCRIPT_NAME /framework/main.php;
fastcgi_param QUERY_STRING url=$uri&$args;
fastcgi_param ENVIRONMENT new;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 64k;
}
///other location directives
expires 2w;
}
来自 PHP-FPM pool.d 的位
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 4
pm.max_spare_servers = 6
pm.max_requests = 1000
我也不认为这是内存问题(没有收到任何内存警报)
top - 10:24:51 up 54 days, 11:11, 1 user, load average: 0.16, 0.12, 0.12
Tasks: 77 total, 1 running, 76 sleeping, 0 stopped, 0 zombie
Cpu(s): 6.7%us, 0.7%sy, 0.0%ni, 91.6%id, 1.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1015380k total, 896120k used, 119260k free, 149888k buffers
Swap: 0k total, 0k used, 0k free, 333820k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28873 www-data 20 0 293m 47m 5572 S 6.0 4.8 0:41.26 php5-fpm
25241 www-data 20 0 80176 6112 2036 S 0.3 0.6 28:57.78 nginx
28872 www-data 20 0 293m 47m 5548 S 0.0 4.8 0:34.50 php5-fpm
28874 www-data 20 0 290m 44m 5556 S 0.0 4.5 0:34.60 php5-fpm
28875 www-data 20 0 286m 39m 5320 S 0.0 4.0 0:40.08 php5-fpm
29249 www-data 20 0 281m 34m 5288 S 0.0 3.5 0:32.04 php5-fpm
31620 www-data 20 0 280m 33m 5176 S 0.0 3.4 0:02.06 php5-fpm
日志文件似乎没有为我提供任何有用的信息,也没有导致任何东西以 15 秒的阈值登录 php slowlog。
如前所述,这只是一个间歇性问题,我找不到它的模式。
如有任何帮助,我们将不胜感激。
此外,如果有更好的拆分测试方法,我也很乐意听听。
最佳答案
您是否安装了 NewRelic(或任何其他分析工具)?这将有助于找出交易缓慢的确切原因,因为问题可能完全出在其他地方。
关于performance - Nginx + PHP-FPM + APC 响应时间慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27910963/
我是 php 新手,使用的是 APC 框架。我正在尝试为使用 APC 的类编写一些单元测试,但在尝试删除然后在 APC 中再次设置一些键值时遇到了一些问题。我的问题可以归结为一小部分代码没有按我预期的
我发现 APC 上存在大量碎片 (>80%),但实际上性能似乎相当不错。我有 read another post这建议在 wordpress/w3tc 中禁用对象缓存,但我想知道减少碎片是否比首先缓存
我发现 APC 上存在大量碎片 (>80%),但实际上性能似乎相当不错。我有 read another post这建议在 wordpress/w3tc 中禁用对象缓存,但我想知道减少碎片是否比首先缓存
我刚刚安装了 APC 以在我的 Ubuntu VPS 服务器上缓存我的 PHP 代码。使用 sudo apt-get install php-apc sudo /etc/init.d/apache2
我正在尝试在 APC 中使用 apc.filter 等功能。但是我所做的一切都不起作用 我应该完成 2 项任务。 1)需要包含1个目录用于缓存。我的代码在apc.ini apc.cache by de
这两个例子之间有什么区别吗: 1 个共享内存段 @ 256MB 4 个共享内存段 @ 64MB 多个分段是否使 APC 更容易清理陈旧的条目? 最佳答案 默认情况下,一些系统(包括大多数 BSD 变体
只是好奇。手册中未记录 here . 也许熟悉APC源代码的人可以解释一下? 最佳答案 它指定一个目录,APC 在启动时从该目录加载缓存数据。在大型设置(想想 100 多台服务器)中,这将允许您放弃编
当您尝试将变量添加到 APC 而 APC 缓存已满时会发生什么?它会自动从缓存中删除最少使用的变量吗? 最佳答案 根据 APC: Runtime Configuration , "在缓存用完可用内存的
互联网上有很多讨论认为在 CLI 中调用 apc_cache_clear() 不会从“web”PHP 进程中清除操作码缓存,无论它们是在 Apache 中运行还是由 FPM 运行(参见 How to
由于我使用 PECL 安装了 APC for PHP,因此有时会出现以下错误:Cannot redeclare class xxx xxx 不时更改。我可以禁用 APC,但 APC 可以极大地提高性能
我正在使用 PHP 的 APC 来存储大量信息(使用 apc_fetch() 等)。这些信息有时需要分析并转储到别处。 据说,我每秒获得数百次点击。这些命中增加了各种计数器(使用 apc_inc()
我最近在我的生产服务器上安装了 APC,但它没有按预期工作。 我所有的项目都是用 SVN 处理的,在生产版本中,我有一个提交后 Hook ,可以将 svn 导出到正确的目录。 问题是使用 APC,除非
关于 APC 操作码缓存,什么是“命中与未命中”?我已经安装了 APC 并且它运行良好,但我有“一些”失误,我想知道这是否“不好”。此外,我正在运行 Openx,因此,我很快就会填满“缓存完整计数”。
在共享 GoDaddy 主机中,未安装 PHP APC。如果 APC 未安装在服务器中,是否有替代方案。那里是否有任何手动过程,例如编译 php 等。请建议 APC 的任何替代方案以提高性能。 仅供引
这是我的 PHP.ini 中的内容: extension=php_apc.dll ... [APC] apc.enabled = 1 我在 Windows Server 2003 上运行 Apa
我已经在Nginx,PHP-FPM,Varnish和APC设置上运行了Magento。 APC的碎片和吹扫率都很高。 碎裂在2小时内增加> 50%,然后缓慢上升到100%。 更令人不安的事实是,穆宁(
我的 VPS 开始出现问题,无法为所有网站上的页面提供服务。它只是显示一个空白页面,或者提供下载 php 文件(幸运的是代码不在下载文件中 :))。服务器仍在运行,但这似乎是 PHP 的问题,因为我可
我想使用 apc_store() 来缓存一些结果。 但我需要知道数据将存储在哪里,限制是多少。 它总是存储在内存中吗?或者也写入磁盘?我更希望将不经常访问的数据存储在磁盘上。我应该为此使用不同的缓存系
我最近将我的 Web 服务器切换到了 Centos 6.3,以及 apache 2.2.15、PHP 5.4.11 和 APC 3.1.14。 我开始不时收到客户的投诉,说某个页面无法正常工作,或者出
每次运行这段代码时,我都会看到 5 个输出: "; echo $after; $later = apc_fetch('vwxyz'); //OK this should definitely be f
我是一名优秀的程序员,十分优秀!