PulseFlow 组件安装文档

一. 系统介绍

随着公司PHP项目体的不断增大,随着不同工程师的功能迭代,如何有效获取PHP项目的执行性能,对于系统整体模块显得异常重要,PulseFlow是一个公司团队内部自研地性能跟踪扩展,它可以在程序员无感知的情况下有效跟踪每一个函数的执行效率,主要分析CPU时间消耗、内存大小消耗,执行次数这三个指标,下面我们将从 PHP生命期 到 组件设计 到 性能优化这三个方面来进行阐述组件。

二 . PulseFLow 扩展端架构

2.1 功能架构

2.2 流程架构

三 . PulseFLow 后端程序架构

3.1 后端程序流程

后台数据转发程序,它负责从信息通道里读取PHP扩展写入的信息,并转发给相应的下一级程序,相关流程图如下。

3.2 后端总体架构

四. 系统安装手册

(请一定按照顺序操作)

下面是详细的安装文档,目的是让阅读者能够顺利编译安装PulseFLow扩展。

4.1. 环境准备

  1. Centos 7系统

  2. PHP 7.0 版本以上

4.2. 内核参数调整(编辑 /etc/sysctl.conf 文件)

扩展依赖UDP数据包发送 和 Linux 内核消息队列,所以需要调整以下两方面参数。

特殊说明:配置完毕后 采用 sudo sysctl -p生效

4.2.1 调整UDP发送缓冲区大小

为了减少UDP发送丢包,因此调大UDP数据包发送缓冲区,经过实验,分配256MB就可以足够。配置选项如下

net.core.wmem_max = 268435456

4.2.2 调整Linux内核消息队列大小

由于默认的Linux对于内核消息队列的相关参数普遍很小,不能满足程序运行需要,因此需要进行相关参数调整:

kernel.msgmni = 10240

kernel.msgmax = 120000

kernel.msgmnb = 1228800000

第一个代表调大Linux系统允许的最大消息队列数量,第二个代表调大系统允许的每条内核消息大小,第三个代表调大操作系统允许的内核消息队列总共大小。

特殊说明:配置完毕后 采用 sudo sysctl -p生效

4.3. 编译插件

4.3.1. 克隆代码

git clone http://gitlab.shein.com:8088/NineWorlds/PulseFlow.git

4.3.2. 编译安装


phpize

./configure  // 这行可能需要配置 --with-php-config=php-config文件路径

make

sudo make install

4.3.3. 创建一个文件

这个文件主要用于内核队列标识的生成,所以这个文件需要放在可以稳定存储的路径,并赋予读写权限,可以给予777权限,(文件内容可以为空) ,样例操作如下:


sudo touch /PulseFlow_sv_ipc

sudo chmod 777 /PulseFlow_sv_ipc

4.3.4. 修改php.ini配置 (不要携带注释内容)

在文件选择空白处,添加以下配置:

extension = /usr/local/php/lib/php/extensions/debug-non-zts-20170718/PulseFlow.so //扩展编译后存储的路径

PulseFlow.enabled = true  //开启插件

PulseFlow.svipc_name=/PulseFlow_sv_ipc  //第三步中创建的文件 的完整路径

4.4. 编译后端程序

4.4.1. 克隆代码

git clone http://gitlab.shein.com:8088/NineWorlds/PulseFlow_IPC_Backend.git

4.4.2. 编译安装


cd PulseFlow_IPC_Backend

mkdir build

cd build

cmake ../

make

cp ../config.ini ./

4.4.3. 配置 config.ini

config.ini 包含后端程序的相关运行参数

  1. mode = svipc (监听System V 内核消息队列 ,v1.0.0稳定支持版本)

  2. output =1 (是否开启终端输出,1代表开启; 0 代表关闭)

  3. workernum = 8 (后台进程数量,推荐数字为CPU核心数的2倍)

  4. fileuri = /PulseFlow_sv_ipc (3.3 节中的文件路径)

  5. ip = 127.0.0.1 (发送数据包的UDP IP地址 JAVA提供)

  6. port = 8002 (发送数据包的UDP 端口地址 JAVA提供)

其他参数不需要调动,上述参数只需要按需改动即可。

4.4.4 .后端程序启动

终端启动程序,直接给予程序执行权限,即可运行。

推荐使用脚本启动,还需要麻烦运维小伙伴编写启动脚本。

4.4.5 后端程序稳定性

后端程序的稳定性主要围绕 主进程进程池 两方面。

程序体内部采用了主从模式,主进程会监控子进程池的状态,所有的进程名称均相同,主进程的PID是进程组的第一个数值,目前我们能够保障子进程池的稳定,如果子进程挂掉了,主进程会负责调控生成新的子进程。

主进程的稳定性还需要运维小伙伴根据主进程PID做监控,如果发现主进程挂掉了,重启主进程。

4.4.6 服务器部署 注意点

部署需要重启php-fpm,所以为了业务保险起见,可以先把nginx下线再重启PHP-FPM,避免业务损失。

文档更新时间: 2019-06-10 13:10   作者:李彪