- 浏览: 2509744 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
PHP的缓存有很多种,包括输出缓冲(ob系列函数),opcode缓存(APC,eAccelerator,XCache等扩展实现),这些大家已经很熟悉了,接下来介绍一下一个不太被人注意的PHP缓存机制:realpath_cache。
介绍
require,require_once,include,include_once这四个语句(并非函数)大家经常会用到,如果用这类语句去包含文件(相对路径)的话,那么PHP会去include_path所 指定的路径中去查找相关文件。一个应用中会存在大量的require_once语句调用,如果每次调用都去include_path中查找相应的文件,势 必会对应用的性能产生负面影响。为了避免这种负面效应产生的影响,PHPER们会使用文件的绝对路径来包含所需的文件,这样就减少了查询 include_path的次数。
其实,PHP自5.1.0起,就引入了RealpathCache。RealpathCache可以把PHP所用到文件的realpath进行缓存,以便PHP再使用这些文件的时候不需要再去include_path中查找,加快PHP的执行速度。
配置
realpath cache的配置项有两个,分别为realpath_cache_size和realpath_cache_ttl,可以在php.ini中进行修改:
; Determines the size of the realpath cache to be used by PHP. This value should
; be increased on systems where PHP opens many files to reflect the quantity of
; the file operations performed.
; http://php.net/realpath-cache-size
;realpath_cache_size = 16k
; Duration of time, in seconds for which to cache realpath information for a given
; file or directory. For systems with rarely changing files, consider increasing this
; value.
; http://php.net/realpath-cache-ttl
;realpath_cache_ttl = 120
其中realpath_cache_size指定了realpath cache的大小,默认为16k,如果你觉得这个容量太小,可以适当增加;realpath_cache_ttl指定了缓存的过期时间,默认为120秒, 对于不经常修改的生产环境来说,这个数字可以调整的更大些。
问题
由于realpath会 展开symlink(即软连接),所以如果你使用修改symlink目标这种方式发布应用的新版本的话,realpath cache会导致一些问题的出现:当你修改symlink使其指向一个新的release目录时候,由于realpath cache所缓存内容还没有过期,于是就会出现应用使用的还是旧的release,直到realpath cache所缓存内容过期失效为止(默认120秒),或者重启php-fpm。
看个例子:
基础环境:nginx + fastcgi + php-fpm
应用环境:/var/www/app是一个symlink,并做为document_root,在/var/www下存在version0.1,version0.2两个版本的release。初始情况下/var/www/app指向version0.1
lrwxr-xr-x 1 weizhifeng staff 10 10 22 16:41 app -> version0.1
drwxr-xr-x 3 weizhifeng staff 102 10 22 16:43 version0.1
drwxr-xr-x 3 weizhifeng staff 102 10 22 16:43 version0.2
version0.1,version0.2内部各有一个hello.php
[weizhifeng@Jeremys-Mac www]$ cat version0.1/hello.php
<?php
echo 'in version0.1';
?>
[weizhifeng@Jeremys-Mac www]$ cat version0.2/hello.php
<?php
echo 'in version0.2';
?>
nginx配置文件片段:
location / {
root /var/www/app; #app为symlink
index index.php index.html index.htm;
}
location ~ \.php$ {
root /var/www/app; #app为symlink
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
此时通过HTTP访问hello.php,得到的内容是’in version0.1′;修改/var/www/app,使其指向version0.2
[weizhifeng@Jeremys-Mac www]$ rm -f app && ln -s version0.2/ app
修改完成之后通过HTTP访问hello.php,得到的内容仍旧是”in version0.1″,可见是realpath cache在作祟了,此时你可以重启php-fpm或者等待120秒钟让realpath cache失效。
你可以使用clearstatcache来清 除realpath cache,但是这个只对当前调用clearstatcache函数的PHP进程有效,而其他的PHP进程还是无效,由于PHP进程池(php-fpm生 成,或者Apache在prefork模式下产生的N个httpd子进程)的存在,这个方法不是很适用。
参考:
http://php.net/manual/en/ini.core.php#ini.sect.performance
http://sixohthree.com/1517/php-and-the-realpath-cache
发表评论
-
设置sudo为不需要密码
2015-04-17 09:04 10456有时候我们只需要执 ... -
haproxy 安装配置和负载实例
2015-03-27 11:49 11487一、环境说明实验环境 OS CentOS5.4 192.1 ... -
/dev/mapper/VolGroup00-LogVol00 100% 如何处理
2015-03-03 10:51 8095服务器磁盘跑满了, 命令查看 如下 [root@lo ... -
Tsar开源:淘宝内部大量使用的系统监控工具
2014-08-07 09:51 919Tsar是淘宝的一个用来收集服务器系统和应用信息的采集报告 ... -
wamp 升级php apache mysql
2014-02-18 14:30 1134wamp对于日常开发来说会增添非常大的方便 但是对于集成 ... -
Linux运维常用命令 (转载)
2013-01-31 10:23 24821 删除0字节文件find-type f - ... -
linux恢复 rm -rf 删除的文件:extundelete
2013-01-24 15:47 8858http://blog.csdn.net/pang6013 ... -
网站排障分析常用的命令
2013-01-21 18:17 1342------------------------------- ... -
迁移vmware服务器后Device eth0 does not seem to be present
2013-01-21 10:58 2199用VMware 安装 linux 6.0 ... -
LoadRunner如何监控Linux系统资源 : rpc.rstatd
2012-12-17 14:49 10214一 简述:LoadRunner监控Linux资源时弹出如下错误 ... -
僵尸Z进程和D进程
2012-12-10 16:47 13068-------------- 1 关于ZOMBIE进 ... -
Unix操作系统硬链接与符号链接的区别
2012-12-10 16:08 1963Unix操作系统有很多值得 ... -
nagios配置参数详解
2012-12-04 14:12 9378# Nagios return codes#定 ... -
nagios自定义监控nginx php和ip_conn
2012-12-03 17:57 3120自定义ip_conn.sh :http://zhume ... -
【汇总】shell show收藏
2012-11-29 14:03 1220================== shell从文本取对应的 ... -
Kickstart+PXE+DHCP+TFTP+NFS自动安装Centos5
2012-11-29 11:34 1556http://5ydycm.blog.51cto.com/11 ... -
haproxy+keepalived高可用负载均衡(七层)
2012-11-29 10:36 3954HAproxy是一款基于TCP( ... -
LVS+Keepalived
2012-11-29 10:10 1688http://www.linuxvirtualserver.o ... -
haproxy & LVS*(keepalived和heartbeat) & ng的比较
2012-11-29 10:04 7514http://network.51cto.com/art/ ... -
运维架构师-并不遥远的彼岸
2012-11-28 17:45 1700在百度里搜索运维架构师,你会发现招聘的职位还不少并且月薪、年 ...
相关推荐
matlab开发-realpath。绝对路径名。
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
真实路径 这是Go(golang)中realpath()函数的实现。 如果为它提供有效的相对路径/别名路径,它将为您返回系统中其真实绝对路径的字符串。 原始版本是Taru Karttunen在golang-nuts组中创建的。 您可以阅读。安装go...
fs.realpath(path, [cache], [callback(err , resolvedPath)]) 由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) ) 接收参数: path 路径 cache 可选,一个文字的映射路径可用于强制一个...
user_ini.cache_ttl = 300 ;;;;;;;;;;;;;;;;;;;; ; Language Options ; ;;;;;;;;;;;;;;;;;;;; ; Enable the PHP scripting language engine under Apache. ; http://php.net/engine engine = On ; This directive...
$vendorDirPath = realpath(__DIR__ . '/vendor'); if (file_exists($vendorDirPath . '/autoload.php')) { require $vendorDirPath . '/autoload.php'; } else { throw new Exception( ...
解析输入中的相对路径和额外的 fileep 字符。... 句法: 输出 = REALPATH(THEPATH) 其中 THEPATH 是文件或文件夹的路径,它应该存在。 例子: realpath('../myfile.txt'); % 返回 /home/user/whatever/myfile.txt
真实路径扩展 * nix系统的realpath()(带有一些扩展名)的实现。
cleancache.php: <?php // 清文件缓存 $dirs = array( realpath(dirname(__FILE__) . '/../data/cache_data'), realpath(dirname(__FILE__) . '/../data/cache_file'), realpath(dirname(__FILE__) . '/../...
如果用PHP不能再满足你的需求,最好的办法就是开发PHP扩展。这有一些好处: 1、增加自己的特殊功能。 2、保护自己的专利代码。 这是几年前的一篇英文文章,现在已被翻译成中文版的。 作者应该是hshq_cn。 链接是:...
真实路径 展开符号链接并打印已... $ npm install --global realpath 用法 $ realpath --help Usage $ realpath Example $ realpath ../unicorn /Users/sindresorhus/dev/unicorn 执照 麻省理工学院:copyright:
$vendor = realpath(__DIR__ . '/../vendor'); if (file_exists($vendor . "/autoload.php")) { require $vendor . "/autoload.php"; } else { $vendor = realpath(__DIR__ . '/../../../'...
$rootDir = realpath(__DIR__ . '/../'); // Autoloader for standalone install (installed via `composer create-project` or cloned locally) $autoloader = realpath($rootDir . '/vendor/...
php下载excel文件,1、在下载的过程中不要 输出任何非文件信息,比如 echo ... $file_name)){ //$this->logger->error(‘file realpath:’.realpath(CACHE_PATH . $file_name)); header( ‘Pragma: public’ ); hea
1)目前只是png的后缀,其他的后缀可以自己修改 2)根据字体文件的大小,字体文件包太小的话个别汉字会出现?...$font = realpath("./font/1.ttf"); //字体文件 //$height =$height + $h*$size; //这里给注释掉
M MA 使用对文件提交和附加测试提出的建议更新了 realpath 版本。 适用于 Windows,可能需要对 Unix 进行一些调整。 在测试中比原始版本快得多。 解析输入中的相对路径和额外的 fileep 字符。 句法: 输出 = ...
require realpath($file); } $logLevel = 0; $LOGGING = getenv('LOGGING'); $VERBOSE = getenv('VERBOSE'); $VVERBOSE = getenv('VVERBOSE'); if (!empty($LOGGING) || !empty($VERBOSE)) { $logLevel = ...
在PHP中获取网站根目录物理路径。 在php程序开发中经常需要获取当前网站的目录,我们可以通过常量定义获取站点根目录物理路径,方便在程序中使用。...define('WWW_PATH',str_replace('\\','/',realpath(d