Golang RPC性能测试
最近刚好要使用Golang的RPC,因此对Golang标准库的RPC进行了一下测试,看看其性能到底如何。RPC服务端和客户端的实现完全使用RPC的 测试环境操作系统:Centos 6.8 (Linux 2.6.32) 场景测试的场景主要是下面两个指标
QPS指标测试中,第一个设置是为了测试单个连接的并发数 实现Server端的实现使用tcp协议,监听4200端口,循环等待连接,每当检测到请求时,启动一个goroutine去处理该连接,注册的服务执行一个简单的乘法操作。 //Service
type Args struct {
A,B int
}
type Quotient struct {
Quo,Rem int
}
type Arith int
func (t *Arith) Multiply(args Args,reply *int) error {
*reply = args.A * args.B
return nil
}
func (t *Arith) Divide(args Args,quo *Quotient) error {
if args.B == 0 {
return errors.New("Divided by zero!")
}
quo.Quo = args.A / args.B
quo.Rem = args.A % args.B
return nil
}
//////////////////////////////////////////////////
//Server
runtime.GOMAXPROCS(4)
arith := new(service.Arith)
server := rpc.NewServer()
log.Printf("Register service:%vn",arith)
server.Register(arith)
log.Printf("Listen tcp on port %dn",4200)
l,e := net.Listen("tcp",":4200")
if e != nil {
log.Fatal("Listen error:",e)
}
log.Println("Ready to accept connection...")
conCount := 0
go func() {
for {
conn,err := l.Accept()
if err != nil {
log.Fatal("Accept Error:,",err)
continue
}
conCount++
log.Printf("Receive Client Connection %dn",conCount)
go server.ServeConn(conn)
}
}()
Client端的创建多个连接(Client),然后每个连接指定不同的并发数,每个并发启动一个goroutine发送指定数量的request,该请求执行一个简单的乘法操作,最后统计整个过程的QPS。 部署QPS指标的测试使用两台上述配置的服务器,然后设置相关的内核参数,主要是允许最大打开的文件数,可使用的端口范围,tcp缓存大小等,操作如下: sysctl -w fs.file-max=10485760 #系统允许的文件描述符数量10m
sysctl -w net.ipv4.tcp_rmem=1024 #每个tcp连接的读取缓冲区1k,一个连接1k
sysctl -w net.ipv4.tcp_wmem=1024 #每个tcp连接的写入缓冲区1k
sysctl -w net.ipv4.ip_local_port_range='1024 65535' #修改默认的本地端口范围
sysctl -w net.ipv4.tcp_tw_recycle=1 #快速回收time_wait的连接
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_timestamps=1
#用户单进程的最大文件数,用户登录时生效
echo '* soft nofile 1048576' >> /etc/security/limits.conf
echo '* hard nofile 1048576' >> /etc/security/limits.conf
ulimit -n 1048576 #用户单进程的最大文件数 当前会话生效
对于Server连接数的测试,使用多台机器,尽量保证同时进行连接同一个server 测试结果QPS指标
单机Server的并发数(同时连接数)
总结上面的前三个实验主要关注Client端的性能,因为自己对服务端的压测指标,业务场景还不是非常明确,所以对Server端的压测试还不够充分,以后会逐步的补充起来。从测试结果来看,Go RPC的Client的性能还是不错的。
原文地址:http://kdf5000.com/2017/03/28/Golang-RPC-性能测试/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |