前言
我之前使用的是xhprof+xhgui
分析线上环境的性能,然而PHP
版本升级到PHP 7
之后,xhprof
已经不可用,于是改用tideways+xhgui
,这实际上也是PHP7
下开源方案的唯一选择,有兴趣的可看下参考资料,有详细说明。
本文主要根据参考资料[1]
配置,因此会有大量重复的地方,我主要其基础上根据实际生产环境的要求多添加了以下额外配置:
mongodb
只绑定到本地xhgui
开启HTTP Basic
认证xhgui
在mongodb
中只保留最近14
天的数据
系统环境
CentOS 7.3 + nginx + mysql + php71
本文假设你的lnmp
环境已经可以正常使用,并且是通过源码安装PHP
,现在只是需要添加性能测试的功能。如果你不熟悉lnmp
环境的配置,推荐使用https://lnmp.org/提供的一键安装包,本文的配置路径均基于该包的默认配置。
安装与配置
分成以下几个部分:
mongodb
tideways
xhgui
应用配置
1.mongodb
安装
#yum install mongodb-server mongodb -y #pecl install mongodb
启动mongodb
服务
#mongod --bind_ip 127.0.0.1
2.tideways
安装
git clone https://github.com/tideways/php-profiler-extension.git cd php-profiler-extension phpize ./configure --with-php-config=`which php-config` make sudo make install
配置
编辑php.ini
文件,添加:
extension=tideways.so tideways.auto_prepend_library=0
重启php-fpm
,执行以下命令看到tideways
的输出表示有生效:
#php -m | grep tide tideways
3.xhgui
xhgui
也是一个网站,最终需要通过web
访问。官方版本是英文版,已经不更新了,有很多BUG
,这里推荐使用中文版:https://github.com/maxincai/xhgui
。
安装(假设在/home/wwwroot/
目录下执行如下命令)
$ git clone https://github.com/maxincai/xhgui.git $ cd xhgui $ php install.php
配置
1.给数据库添加索引,非必须,但是强烈推荐:
$ mongo > use xhprof > db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } ) > db.results.ensureIndex( { 'profile.main().wt' : -1 } ) > db.results.ensureIndex( { 'profile.main().mu' : -1 } ) > db.results.ensureIndex( { 'profile.main().cpu' : -1 } ) > db.results.ensureIndex( { 'meta.url' : 1 } )
2.nginx
配置(xhgui
本身没有安全机制,它捕捉的数据中有敏感数据,因此开放到外网后必须开启HTTP Basic认证)
创建/usr/local/nginx/conf/vhost/xhgui.conf
文件,内容如下:
server { listen 8888; # 根据实际情况改成自己的端口 server_name 127.0.0.1; #根据实际情况改成自己的域名 index index.html index.htm index.php; root /home/wwwroot/xhgui/webroot/; location ~ \.php { auth_basic "xhgui needs authentication"; # 开启HTTP Basic认证 auth_basic_user_file htpasswd; # 密码文件 try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location / { try_files $uri $uri/ /index.php?$uri&$args; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 30d; } access_log /home/wwwlogs/xhgui.access.log; error_log /home/wwwlogs/xhgui.error.log; }
开启HTTP Basic认证
需要生成密码文件htpasswd
。假设生成一个tester
用户,密码为123456
,则执行以下命令:
printf “tester:$(openssl passwd -crypt 123456)\n" >> /usr/local/nginx/conf/htpasswd
生成后记得检查下文件内容,格式内容应该类似如下:
$cat /usr/local/nginx/conf/htpasswd tester:1qe8kAN82iOyo
完成配置重启,在浏览器中进入http://127.0.0.1:8888
,应该能看到界面了,只是此时还没有数据。
3.进一步优化配置
xhgui
默认是按1%采集的,可是如果是排查问题时还是希望能够100%采集会比较方便。进入xhgui
源码目录,修改config/config.default.php
文件,平时仍然按1%的采样率采样,防止数据增长过快,当想调试时,就在URL
中添加debug=1
的参数即可。
在config/config.default.php
中,找到profiler.enable
这里,按如下修改:
'profiler.enable' => function() { // url 中包含debug=1则百分百捕获 if(!empty($_GET['debug'])){ return true; } else { // 1%采样 return rand(1, 100) === 42; } },
如果不删除采集的数据,很快就会发现mongo
数据库变得很大。因此推荐配置下mongo
数据库,只保留最近14天的数据。
#mongo > use xhprof > db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 3600*24*14 } )
如果想手动全部删除,则执行如下命令:
$ mongo $ use xhprof; $ db.dropDatabase();
4.应用配置
让应用实现采集,需要修改对应的nginx
配置文件,添加:
fastcgi_param TIDEWAYS_SAMPLERATE “100"; #是否采样取决于xhgui的随机数配置和这里的采样率配置,两者必须同时满足,这里简单设置成100,由xhgui去控制 fastcgi_param PHP_VALUE "auto_prepend_file=/home/wwwroot/xhgui/external/header.php";
完整的nginx
示例配置文件如下:
server { listen 80; #根据实际情况修改 server_name test.dev; #根据实际情况修改 index index.html index.htm index.php; root /home/wwwroot/test/web/; location ~ \.php { fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index /index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param TIDEWAYS_SAMPLERATE "100”; # 此处为重点 fastcgi_param PHP_VALUE "auto_prepend_file=/home/wwwroot/xhgui/external/header.php”; # 此处为重点 include fastcgi_params; } try_files $uri $uri/ @rewrite; location @rewrite { rewrite ^/(.*)$ /index.php?_url=/$1; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 30d; } access_log /home/wwwlogs/test.access.log; error_log /home/wwwlogs/test.error.log; }
最终成功配置并采集到数据的界面
以上是搭建php7的性能测试环境的方法 的详细内容。更多信息请关注PHP中文网其他相关文章!

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考虑使用AttActAcks.s.s.4)

会话再生是指在用户进行敏感操作时生成新会话ID并使旧ID失效,以防会话固定攻击。实现步骤包括:1.检测敏感操作,2.生成新会话ID,3.销毁旧会话ID,4.更新用户端会话信息。

PHP会话对应用性能有显着影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

phpientifiesauser'ssessionusessessionSessionCookiesAndSessionIds.1)whiwSession_start()被称为,phpgeneratesainiquesesesessionIdStoredInacookInAcookInamedInAcienamedphpsessidontheuser'sbrowser'sbrowser.2)thisIdAllowSphptptpptpptpptpptortoreTessessionDataAfromtheserverMtheserver。

PHP会话的安全可以通过以下措施实现:1.使用session_regenerate_id()在用户登录或重要操作时重新生成会话ID。2.通过HTTPS协议加密传输会话ID。3.使用session_save_path()指定安全目录存储会话数据,并正确设置权限。

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Atom编辑器mac版下载
最流行的的开源编辑器

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中