穷则独善其身,达则兼济天下

工匠之路

开源项目:manEcho(一个Linux内核函数查询工具)

背景描述由于工作原因,经常需要查询linux内核函数,对于不同版本的linux版本,部分函数还有一些差异,对于这种需求,我就动手实现了一个小工具,可以帮助我快速查询linux内核函数。工具原理工具分为两部分,客户端和服务端,客户端用于发送搜索请求,服务端用来接受用户的请求并把用户的请求转换成linux的man命令在指定版本的内核文档目录中执行,执行完毕后,把标准输出中的结果数据通过socke...

开源项目:Ivory-jaeger-php-client :安装文档

一. 背景描述Ivory-jaeger-php-client是一款全链路跟踪客户端工具,基于PHP开发,项目发源自Jaeger-PHP,框架建立在OpenTracing 1.0.0-beta2 ,这篇文章主要讲解工具的安装过程。二. 插件依赖关系插件主体为 Ivory-jaeger-php-client 代码包,这个代码包依赖两个包:opentracing/opentracing ( 1.0...
October 7, 2018

编程笔记:Golang 函数type类型

Golang 的函数类型是一等类型,这意味着可以把函数当作一个值来传递和使用,函数值既可以当作其他函数的参数 也可以当作其他的函数的结果,不过我们需要把函数首先提升一个等级,样例代码如下:package main import "fmt" type intNumOps func(num1 int, num2 int) (int) func main() { ...
September 7, 2018

踩坑:System V 内核消息队列的配置生效问题

System V 内核消息队列可以很方便的帮助我们实现进程间的通信,这种通信通过内核内存拷贝,可以达到很高的速度。由于默认的Linux对于内核消息队列的相关参数普遍很小,不能满足程序运行需要,因此需要进行相关参数调整:kernel.msgmni = 10240kernel.msgmax = 102400kernel.msgmnb = 1048576000第一个代表调大Linux系统允许的最大...

设计文档:PulseFlow_IPC_Backend

PulseFLow还有一部分功能是集中在信息后端的,当PHP引擎发送信息给后端程序后,后端程序再把信息进行组装,发给下一级程序。一 . 组成部分后端程序,分为以下几个部分:配置中心:(配置文件 + 配置解析器)(采用ini文件配置格式)。进程管理器:维持进程池,保持进程池的存活量。信息发送: 信息组装 + 信息发送(UDP发送)二. 工作流程2.1 总体流程图2.2 系统模型(进程池模型)后...

设计文档: PulseFLow PHP性能监控插件

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

编程笔记:检测并分析PHP扩展的内存泄露

1. 背景描述基于C/C++开发的程序,内存管理是很大程度上的工作,我们在这篇文章里来给大家讲解一下如何监控程序体可能存在的内存泄露。工欲善其事必先利其器,这里选择使用 Valgrind 工作来进行内存监控。http://valgrind.org/2. Valgrind工具安装 git clone git://sourceware.org/git/valgrind.git ./auto...
July 25, 2018

开源项目:PulseFLow 性能跟踪扩展

背景描述随着公司PHP项目体的不断增大,随着不同工程师的功能迭代,如何有效获取PHP项目的执行性能,对于系统整体模块显得异常重要,PulseFlow是一个性能跟踪扩展,它可以在程序员无感知的情况下有效跟踪每一个函数的执行效率,主要分析CPU时间消耗、内存大小消耗,这个组件除了能够快速记录每个函数体的性能信息,还具备一系列的发送机制,主要包括共享内存队列(System V 和 Posix)、U...
July 24, 2018

编程笔记:C动态连接库编程

动态链接库,可以方便程序体扩展功能、更新组件,相对于编译时连接,具有更大的灵活性,下面我们从三个方面来讲解一个案例。库函数定义在这里,我们首先定义一个简单的加法函数。#include <stdio.h> int add(int a,int b){ return a+b; }动态链接库编译我们通过编译命令对于源码文件进行编译,在linux系统中编译为so文件。gcc -s...