[TOC]
### 1. 下载xhprof源码并安装
> https://github.com/longxinH/xhprof.git
```
cd xhprof/extension/
phpize
./configure --with-php-config=/www/server/php/71/bin/php-config --enable-xhprof
make && make install
```
> 修改php.ini配置
```
[xhprof]
extension = xhprof.so
xhprof.output_dir = /tmp/xhprof
```
### 2. Yii2集成xhprof
> 将xhprof下的xhprof_html以及xhprof_lib拷贝至项目中
~~~
public function actionTest1()
{
error_reporting(E_ALL);
ini_set('display_errors', 'on');
$this->xhprofStart();
for ($i = 0; $i < 83000; $i++) {
$array[] = $i;
}
$this->haha();
$this->xhprofEnd();
}
public function haha(){
echo 'haha';
}
//xhprof监控开始
public function xhprofStart(){
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
//xhprof监控结束
public function xhprofEnd(){
$xhprof_data = xhprof_disable();
dump($xhprof_data);
$xhprof_root = '/www/wwwroot/liwu4/frontend/web/';
include_once $xhprof_root."xhprof_lib/utils/xhprof_lib.php";
include_once $xhprof_root."xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new \XHProfRuns_Default();
$route = \Yii::$app->controller->route;
$run_id = $xhprof_runs->save_run($xhprof_data, $route);
echo '统计<br>';
$domain = $_SERVER['SERVER_NAME'];
$url = "http://".$domain."/xhprof_html/index.php?run=$run_id&source=$route";
echo '<a target="_blank">'.$url.'</a>';
}
~~~
> 在运行的时候,可能会没有监控数据,报Invalid Run Id的错误
> 解决办法
```
chmod -R 777 /tmp/xhprof
```
> 修改xhprof_lib/utils/xhprof_runs.php中找到save_run()方法
~~~
$file_name = $this->file_name($run_id, $type); // 找到此代码,新增以下代码
// 增加以下创建文件夹的代码,才能生成报表数据
$dir = dirname($file_name);
if (!is_dir($dir)) {
mkdir($dir, 0777, true);
}
~~~
### 3. 运行并测试
> http://www.xx.com/wangkun/test1
![](https://img.kancloud.cn/83/38/8338047e814ae3f073a56ce44461e16c_962x546.png)
> 由于xhprof属于非侵入性,可以运用到正式环境,常用URL中加入code方式,输入正确的code情况下走xhprof
> xdebug属于侵入式性能分析,安装好了php插件后,页面就自动开启,只能运用在测试环境
> 参考此文 https://blog.csdn.net/maquealone/article/details/80434699
### 4. 图形化结果
> 点击[View Full Callgraph]可以看图形化结果,会报错“failed to execute cmd " dot -Tpng"”
> 解决办法
~~~
yum install graphviz
~~~
> 安装完扩展后,需要修改php.ini,在disable_functions中把proc_open去掉。
![](https://img.kancloud.cn/3b/c6/3bc66d56babc002d5ed3da720de148f7_1797x543.png)
- 重点知识预览
- 理解面向对象
- 魔术变量
- 魔法方法
- 面试题基础篇
- PSR标准
- class (单继承)
- trait (多继承)
- 匿名函数
- 日期处理
- 文件处理
- 字符串处理
- BC Math
- 数组处理
- HTTP的各个状态
- PHP环境变量
- session & cookie
- composer
- 变量的类型转换和判断类型方法
- PHP的错误和异常处理
- PHP的ob缓冲区
- PHP内存调试
- pcntl多进程
- PHP yield (生成器):节约内存
- Nginx负载均衡
- 同一台服务器如何测试负载均衡
- 安全方面
- HTTPS实现
- PHP性能分析(xhprof)
- 高并发雪崩解决方法
- 接口加密设计(安全性)
- 数据库(重要数据操作)日志记录规范
- APP发版操作
- 缓存使用
- Memcache
- MYSQL缓存
- Redis
- 安装与使用
- redis过期策略和内存淘汰机制
- Redis分布式锁
- Redis雪崩、穿透、击穿问题
- redis主从
- redis哨兵
- opcache
- 消息队列
- Redis消息队列
- Beanstalkd
- 数据库汇总
- MYSQL哪些情况下会忽略索引
- MYSQL常用命令
- SQL高级运用
- MYSQL分布式集群使用
- 主从复制
- 同一台服务器如何测试主从同步
- MYSQL索引类型
- MYSQL分区
- 锁机制
- 事务隔离级别(脏读、幻读、不可重复读)
- 分布式事务
- MYSQL性能优化
- swoole
- 安装以及升级
- swoole进程初识
- TCP相关教程
- TCP数据传输DEMO(含同步、异步、长连接)
- Server异步投递task任务
- TCP粘包问题
- websocket相关教程
- websocket初体验DEMO
- websocket核心功能(心跳检测、用户校验、重连机制)
- websocket用户之间通信DEMO
- 定时器的使用
- 常驻内存以及如何避免内存泄漏
- max_request使用实例
- 守护进程、信号和平滑重启
- 全文检索工具
- MYSQL全文索引
- ElasticSearch全文检索
- ES基础知识
- Mapping及增删改查
- DSL查询语法
- 搜索建议 (completion)
- mysql转dsl工具
- ES的安装与PHP测试
- kibana可视化工具
- ELK日志管理系统
- PHP设计模式
- 创建型模式
- 工厂模式
- 单例模式
- 注册器模式
- 工厂模式于策略模式的区别
- 结构型模式
- 适配器模式
- 桥接模式
- 装饰器模式
- 行为型模式
- 观察者模式
- 策略模式
- 高并发设计