📄️ 使用krpc
安装krpc基础环境以及编译krpc.
📄️ 服务开发
示例程序
📄️ http服务
这里指我们通常说的http/h2服务,而不是可通过http/h2访问的pb服务。
📄️ Thrift服务
thrift是应用较广的RPC框架,最初由Facebook发布,后交由Apache维护。为了和thrift服务互通,
📄️ CPU使用分析
krpc可以分析程序中的热点函数。
📄️ 堆栈分析
krpc可以分析内存是被哪些函数占据的。heap profiler的原理是每分配满一些内存就采样调用处的栈,“一些”由环境变量TCMALLOCSAMPLEPARAMETER控制,默认524288,即512K字节。根据栈表现出的函数调用关系汇总为我们看到的结果图。在实践中heap profiler对原程序的影响不明显。
📄️ 竞态分析
krpc可以分析花在等待锁上的时间及发生等待的函数。
📄️ server dummy
如果你的程序只使用了krpc的client或根本没有使用krpc,但你也想使用krpc的内置服务,只要在程序中启动一个空的server就行了,这种server我们称为dummy server。
📄️ rpc追踪
用户能通过/rpcz看到最近请求的详细信息,并可以插入注释(annotation),不同于tracing system(如dapper)以全局视角看到整体系统的延时分布,rpcz更多是一个调试工具,虽然角色有所不同,但在krpc中rpcz和tracing的数据来源是一样的。当每秒请求数小于1万时,rpcz会记录所有的请求,超过1万时,rpcz会随机忽略一些请求把采样数控制在1万左右。rpcz可以淘汰时间窗口之前的数据,通过-spankeepingseconds选项设置,默认1小时。一个长期运行的例子。
📄️ thread local
本页说明kthread下使用pthread-local可能会导致的问题。kthread-local的使用方法见这里。
📄️ json和protobuf转换
krpc支持json和protobuf间的双向转化,实现于json2pb,json解析使用rapidjson。此功能对pb2.x和3.x均有效。pb3内置了转换json的功能。
📄️ 常见线程模型
连接独占线程或进程
📄️ atomic使用
我们都知道多核编程常用锁避免多个线程在修改同一个数据时产生race condition。当锁成为性能瓶颈时,我们又总想试着绕开它,而不可避免地接触了原子指令。但在实践中,用原子指令写出正确的代码是一件非常困难的事,琢磨不透的race condition、ABA problem、memory fence很烧脑,这篇文章试图通过介绍SMP架构下的原子指令帮助大家入门。C++11正式引入了原子指令,我们就以其语法描述。
📄️ flags使用
krpc使用gflags管理配置。如果你的程序也使用gflags,那么你应该已经可以修改和krpc相关的flags,你可以浏览flags服务了解每个flag的具体功能。如果你的程序还没有使用gflags,我们建议你使用,原因如下:
📄️ IO详解
一般有三种操作IO的方式:
📄️ 多写变量
kvar是多线程环境下的计数器类库,支持单维度kvar和多维度mkvar,方便记录和查看用户程序中的各类数值,
📄️ kvar使用
什么是kvar?
📄️ 单维度kvar
kvar Introduction
📄️ 多维度kvar
mkvar Introduction