nginx性能优化调优之google-perftools

什么是google-perftools?
google-perftools是google公司开发的一款针对 C/C++ 程序的性能分析开源工具,使用该工具可以对 CPU 时间片、内存等系统资源的分配和使用进行分析
google-perftools包含四个工具,分别是:TCMalloc、heap-checker、heap-profiler和cpu-profiler,其中我们本次需要的一个工具TCMalloc是google-perftools的其中一个工具,用于优化内存分配的效率和速度,帮助在高并发的情况下很好的控制内存的使用

运维为什么要使用google-perftools?
使用google开发的google-perftools优化nginx和mysql的内存分配效率和速度,帮助在高并发的情况下控制内存的使用。但是,nginx的内存占用其实是很少的,一个进程占用的内存大概只有12M左右,所以google-perftools对nginx的优化效果可能不太明显

什么是TCMalloc工具?
上面已经说过TCMalloc是google-perftools的一个工具与标准的glibc库的Malloc相比,TCMalloc库在内存分配效率和速度上要高很多,这在很大程序上提高了服务器在高并发情况下的性能,从而降低系统的负载如何为Nginx添加TCMalloc库支持,要安装TCMalloc库,需要安装libunwind和gperftools两个软件包,libunwind库为基于64为CPU操作系统的程序提供了基本函数调用链和函数调用函数寄存器功能,32位操作系统不需要安装。

通过上面的三连问我们已经大致了解google-perftools是什么玩意了,那么下面我们将进行如何安装和使用

安装编译工具:
yum -y install gcc make
yum -y install gcc gcc-c++

安装libunwind:
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gz
tar zxvf libunwind-0.99.tar.gz
cd libunwind-0.99/
CFLAGS=-fPIC ./configure --prefix=/usr
make CFLAGS=-fPIC
make CFLAGS=-fPIC install

安装google-perftools:
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.7/gperftools-2.7.tar.gz
tar zxvf gperftools-2.7.tar.gz
cd gperftools-2.7
./configure --enable-frame-pointers --enable-libunwind --with-tcmalloc-pagesize=32

./configure --enable-frame-pointers
make && make install
注:如果是64位系统,需要先安装libunwind,再在configure gperftools的时候,添加--enable-frame-pointers参数

安装nginx并添加参数
安装nginx省略,如果nginx是在安装google-perftools前已经安装了,那么需要考虑是否平滑升级及平滑重启,平滑升级加入参数即可
例: ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-google_perftools_module

上面虽然已经安装好,但是还是不能够使用,因为没有在nginx配置文件中加入这个模块

1.添加线程目录
mkdir /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc
2.做软连接或引用动态库
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig
3.修改nginx.conf配置文件,在pid行添加以下信息,表示开启这个模块
google_perftools_profiles /tmp/tcmalloc;

然后启动或重启nginx

验证即可
nginx 44112 nobody 10w REG 8,4 0 1044489 /tmp/tcmalloc.44112
一个线程会有一个记录文件,由于我只开了一个线程,所以只有一个记录文件

扩展:
启动nginx,发现缺少libprofiler.so.0动态库的支持
/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libprofiler.so.0: cannot open shared object file: No such file or directory
这是因为perftools是通过Linux的LD_PRELOAD达到java应用程序运行时,当调用malloc时换用它的libtcmalloc.so
查找系统下是否有libprofiler.so.0动态库
whereis libprofiler.so.0
libprofiler.so: /usr/local/lib/libprofiler.so.0 /usr/local/lib/libprofiler.so
由于不在nginx程序查找的目录下,所以需要创建软链接
评估缺少的动态库支持,可通过ldd /usr/local/nginx/sbin/nginx的方式,查看"not found"部分。
ln -s /usr/local/lib/libprofiler.so.0.4.18 /lib64/libprofiler.so.0

原文地址:https://blog.51cto.com/jiaxinwang/2465473

时间: 2024-10-08 06:32:50

nginx性能优化调优之google-perftools的相关文章

Java程序性能优化-调优层次

前言 前篇知道了性能优化相关概念,本篇就继续介绍如何调优.代码优化是我们最常见的,但是除此之外,还有软件架构上.JVM虚拟机层.数据库以及操作系统层面都可以通过各种手段进行调优,从而提升性能. 正题 优化的一般步骤: 如果我们的系统出现了问题,那么最主要的就是要查找并解决性能瓶颈问题,同时性能优化可能对原有的实现进行较大的改动,因此一定要测试打到目标之后才结束. 1.设计调优:设计阶段 一个良好的系统设计可以规避很多潜在的性能问题.因此,尽可能多花些时间在系统设计上,是创建高性能程序的关键. 我

性能优化调优 | 如何分配虚拟机CPU拓扑会得到较好的性能

文章转自:原创: 杨建旭,https://mp.weixin.qq.com/s/ZtwKmG3xCsTShJni6xTCmw 对于物理机来说,CPU有socket.Core.thread的概念,一个linux虚拟机上面同样有这些信息,这些信息是什么含义,和物理机之间有多少对应关系呢?如何分配CPU拓扑,会得到较好的性能? 物理CPU 首先介绍一下物理CPU的概念: 一个服务器可以有多个socket 一个socket(插槽)可以插一个chip. 一个chip里面可以有N个core(核) 一个核里面

《linux性能及调优指南》 3.5 网络瓶颈

3.5 Network bottlenecks A performance problem in the network subsystem can be the cause of many problems, such as a kernel panic. To analyze these anomalies to detect network bottlenecks, each Linux distribution includes traffic analyzers. 网络子系统的性能问题

mysql性能基本调优

innodb_buffer_pool_size 80%(系统缓存池) innodb_log_file_size    4G (mysql5.5中限定的最大数值,redo日志增大提高性能,redo日志小崩溃后恢复更快) \\开始将这个值设置为512M可以拥有1G的的redo日志,会使得拥有充裕的写操作空间 max_connections 151(默认值,需要修改) innodb_file_per_table OFF(默认将所有表的数据和索引存放在共享表空间,值为ON时会为每张表建立一个.ibd文件

linux内核参数优化调优

TCP/IP及内核参数优化调优 Linux下TCP/IP及内核参数优化有多种方式,参数配置得当可以大大提高系统的性能,也可以根据特定场景进行专门的优化,如TIME_WAIT过高,DDOS攻击等等.如下配置是写在sysctl.conf中,可使用sysctl -p生效,相关参数仅供参考,具体数值还需要根据机器性能,应用场景等实际情况来做更细微调整. net.core.netdev_max_backlog = 400000#该参数决定了,网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列

Nginx性能优化配置(三)

Nginx性能优化配置(三)  本文主要介绍Nginx的性能优化配置,文章的层次架构如图所示. 1.Nginx的工作进程优化 1.worker_processes 作用:worker进程的数量:通常应该等于小于当前主机的cpu的物理核心数:auto表示根据CPU的物理核心数自动调整工作进程数.使用lscpu或或者cat /proc/cpuinfo | grep 'processor' | wc -l 可以查看CPU的物理核心数. 配置:worker_processes auto: 配置段:mai

《Linux 性能及调优指南》写在后面的话

感谢飞哥的翻译. 目前飞哥 (http://hi.baidu.com/imlidapeng)的网址已经不能访问了. <Linux 性能及调优指南>这本书的原文地址:http://www.redbooks.ibm.com/abstracts/redp4285.html也不能访问了. 在此更新https://lenovopress.com/redp4285.pdf 我在网上只查到飞哥翻译了1,2,3章,第四章还未翻译.如果最近工作时间允许的话,我在翻译完smb.conf之后可以看看本书第四章!!

Nginx 性能优化有这篇就足够了!

1.Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2.如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/cpuinfo | wc -l [[email protected]~]# vi/usr/local/nginx1.10/conf/nginx.conf worker_processes 4; [[email protected]~]# /usr/local/ngi

nginx性能优化及内核参数调整

Nginx配置参数优化 Nginx作为高性能web服务器,即使不特意调整配置参数也可以处理大量的并发请求.以下的配置参数是借鉴网上的一些调优参数,仅作为参考,不见得适于你的线上业务. worker进程 worker_processes 该参数表示启动几个工作进程,建议和本机CPU核数保持一致,每一核CPU处理一个进程. worker_rlimit_nofile 它表示Nginx最大可用的文件描述符个数,需要配合系统的最大描述符,建议设置为102400. 还需要在系统里执行ulimit -n 10