服务器性能调优-菜鸟初尝试

        有时间后台服务会遇到cpu消耗过高的问题,这个时候需要找出到代码中导致高消耗的函数调用,予以优化。下面举个最简单的例子。

        1.发现目标进程cpu过于繁忙并且VIRT值过大。

         VIRT过大是因为目标进程attach了一块很大的共享内存,所以不是问题。但是cpu消耗有点大,现在每分钟包量不足13W,那么大约30W就会把cpu撑满,而我们服务器通常每分钟可以处理600W的包量,所以这里有问题。

       2.用perf查看一下cpu消耗的分布

      

        发现消耗最多的是_IO_vfscanf这个函数,那么我想搞清楚究竟我代码中那个操作导致这个函数被调用。

        3.用pstack跟踪这个进程的调用栈,为了跟踪到_IO_vfscanf的调用路径,我采用了最笨的方法,那就是反复执行pstack并将结果输出到一个文件中,然后再在这个文件中查找_IO_vfscanf:

        

       没有发现IO_vfscanf只发现了跟他很像的一个系统调用_IO_vfscanf_internal。注意:pstack不能查看内核态信息,它只是告诉我们是哪个系统调用被执行了,所以我只好寄希望于_IO_vfscanf_internal正好调用了IO_vfscanf。查看他的调用栈,发现了写log会调用_IO_vfscanf_internal。

      

      4.于是提高日志级别,减少一些日志。再看cpu消耗

        

        看见cpu减少了一半。

        这是一个很简单的例子,只是作为以后服务性能调优,负载均衡,数据一致等疑难杂症治疗的入门小练习。

猜你喜欢

转载自blog.csdn.net/wjj547670933/article/details/44996127