1. 程式人生 > >TCMalloc優化MySQL、Nginx、Redis記憶體管理

TCMalloc優化MySQL、Nginx、Redis記憶體管理

TCMalloc(Thread-Caching Malloc)與標準glibc庫的malloc實現一樣的功能,但是TCMalloc在效率和速度效率都比標準malloc高很多。TCMalloc是 google-perftools工具中的一個(gperftools四個工具分別是:TCMalloc、heap-checker、heap- profiler和cpu-profiler),這個工具是開源的,以原始碼形式釋出。如果覺得自己維護一個記憶體分配器麻煩的話,可以考慮將 TCMalloc靜態庫連線到你的程式中。使用的時候和glibc中的malloc呼叫方式一模一樣。你需要做的只是把TCMalloc的動態庫或者靜態 庫連線進你的程式中,你就可以獲得一個高效,快速,安全的記憶體分配器。



與標準的glibc庫的malloc相比,TCMalloc在記憶體的分配效率和速度要高,可以在高併發的情況下很好的控制記憶體的使用,提高伺服器的效能,降低負載。TCMalloc的實現原理和測試報告請見一篇文章:《TCMalloc:執行緒快取的Malloc

tcmalloc作為可選項已經新增到lnmp最新原始碼一鍵安裝包

安裝libunwind庫:
如果系統是64位的需要先安裝libunwind庫,32位系統則不需要安裝。

libunwind庫為基於64位CPU和作業系統的程式提供了基本的堆疊輾轉開解功能,其中包括用於輸出堆疊跟蹤的API用於以程式設計方式輾轉開解堆疊的API以及支援C++異常處理機制的API。

wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz
tar zxf libunwind-1.1.tar.gz
cd libunwind-1.1
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
cd ../

gperftools的安裝:

wget http://gperftools.googlecode.com/files/gperftools-2.1.tar.gz
tar xzf gperftools-2.1.tar.gz
cd gperftools-2.1

可以加入引數只編譯tcmalloc(./configure --enable-minimal、--disable-cpu-profiler、--disable-heap-profiler、 --disable-heap-checker、--disable-debugalloc),64位作業系統不安裝libunwind也不會報錯,注意 生成的庫檔案是libtcmalloc_minimal.*
64位作業系統,如下

./configure

32位系統,不需要安裝libunwind,但是一定要新增–enable-frame-pointers引數,如下

./configure --enable-frame-pointers
make && make install

編譯安裝後,輸入以下命令:

echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
ldconfig #必須執行

使用TCMalloc優化MySQL
MySQL 5.1靜態編譯方法,./configure預編譯時假設下面引數

--with-mysqld-ldflags=-ltcmalloc

MySQL 5.5靜態編譯方法,cmake預編譯時加上下面引數

-DCMAKE_EXE_LINKER_FLAGS="-ltcmalloc" -DWITH_SAFEMALLOC=OFF

採用動態載入

sed -i '[email protected] [email protected] mysqld_safe\nexport LD_PRELOAD=/usr/local/lib/[email protected]' /usr/local/mysql/bin/mysqld_safe
service mysqld restart

驗證載入tcmalloc在MySQL中是否生效,如下:

lsof -n | grep tcmalloc

使用TCMalloc優化Nginx
為了使nginx支援google-perftools,需要在安裝過程中新增"--with-google_perftools_module"選項重新編譯nginx。安裝如下:

cd lnmp/src/nginx-1.4.2
make clean
./configure --prefix=/usr/local/nginx --user=www --group=www \
--with-http_stub_status_module --with-http_ssl_module --with-http_flv_module \
--with-http_gzip_static_module --with-google_perftools_module
make && make install

為新增執行緒目錄:

mkdir /tmp/tcmalloc
chown -R www.www /tmp/tcmalloc
vi /usr/local/nginx/conf/nginx.conf #pid下一行新增
google_perftools_profiles /tmp/tcmalloc;

驗證tcmalloc是否在Nginx中生效

lsof -n | grep tcmalloc

每個執行緒(work_processes的值)會有一行記錄。每個執行緒檔案後面的數字值就是啟動的nginx的pid值。

使用TCMalloc優化redis
注意:redis-2.4以上自帶jemalloc,你不需要加任何引數, 通過zmalloc.c原始碼中我們可以看到,Redis在編譯時,會先判斷是否使用tcmalloc,如果是,會用tcmalloc對應的函式替換掉標準 的libc中的函式實現。其次會判斷jemalloc是否使得,最後如果都沒有使用才會用標準的libc中的記憶體管理函式。所以用tcmalloc優化請 謹慎使用,這兩著分配器碎片率相差不大,建議用自帶jemalloc

cd lnmp/src/redis-2.6.16
make USE_TCMALLOC=yes FORCE_LIBC_MALLOC=yes
/bin/cp src/{redis-benchmark,redis-check-aof,redis-check-dump,redis-cli,redis-sentinel,redis-server} /usr/local/redis/bin

相關推薦

TCMalloc優化MySQLNginxRedis記憶體管理

TCMalloc(Thread-Caching Malloc)與標準glibc庫的malloc實現一樣的功能,但是TCMalloc在效率和速度效率都比標準malloc高很多。TCMalloc是 google-perftools工具中的一個(gperftools四個工具分別是:TCMalloc、heap-ch

15套java架構師集群高可用高可擴展高性能高並發性能優化Spring bootRedisActiveMQNginxMycatNettyJvm大型分布式項目實戰視頻教程

mycat 擴展 並發解決方案 入門到 -1 高端 資料 src nio * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; color: #FF0 } 15套java

KVM虛擬化MySQLNginxRabbitMQRedis組件安裝指導

mysql字符集 eas www cat listen copy 測試 arc remove 1 檢查服務器的配置信息 1.1 檢查服務器的CPU信息 [root@localhost iso]#cat /proc/cpuinfo | grep na

大型網際網路公司必備的架構技術棧——分散式架構高可擴充套件高效能高併發效能優化Spring bootRedisActiveMQNginxMycatNettyJvm大型分散式專案實戰

效能優化 JVM調優 Java程式效能優化 Tomcat Mysql Spring IOC Spring AOP Spring MVC Spring 5新特性 Mybatis 分散式架構 架構核心服務層技術 架構關鍵技術設施 分散式訊息通訊 非同

Java高架構師分散式架構高可擴充套件高效能高併發效能優化Spring bootRedisActiveMQNginxMycatNettyJvm大型分散式專案實戰學習架構師之路

工作1-5年開發經驗,當你們提出漲工資的時候,或者要offer的時候底氣怎麼樣,是不是底氣十足,不給漲工資就辭職,是不是有自信提出來主管、或者是專案經理都能同意,他們相當設法把你留住。如果這樣你才是成功。什麼技術都沒有何談工資! 給你分析一下這些技術,給大家羅列一些技術,看

9,Linux下的python3,virtualenv,Mysqlnginxredis安裝配置 常用服務安裝部署

常用服務安裝部署   學了前面的Linux基礎,想必童鞋們是不是更感興趣了?接下來就學習常用服務部署吧! 安裝環境: centos7 + vmware + xshell  MYSQL(m

java高級視頻課程DubboRedisActiveMQNginxMycatSpringMongoDBZeroMQGitNosqlJvmMecachedNettyNioMina

strong 程序設計 queue隊列 frp lin 海量數據 並發解決方案 elkstack line * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架構師、集群、

centos7重啟apachenginxmysqlphp-fpm命令

httpd stop 啟動 sta fpm start res gin SQ apache 啟動 systemctl start httpd 停止 systemctl stop httpd 重啟 systemctl restart httpd mysql 啟動 system

查看Linux Nginx MySQL PHP 版本的方法

style tps HR version light gda targe true pac 參考:查看Linux 、Apache 、 MySQL 、 PHP 版本的方法 1.查看Linux版本: uname -a; more /etc/issue; cat /proc/ve

Nginx系列-2.配置LNMP(LinuxNginxMySQLPHP)架構

Linux Nginx Nginx系列-2.配置LNMP(Linux、Nginx、MySQL、PHP)架構 目錄 - Nginx系列 Nginx系列-1.Linux下安裝Nginx Nginx系列-2.配置LNMP(Linux、Nginx、MySQL、PHP)架構 Nginx系列-3.配置Ngi

在Docker下安裝Tomcatnginxmysql

安裝Tomcat #搜尋tomcat映象   docker search tomcat     #拉取tomcat映象   docker pull tomcat    #根據映象啟動tomcat容器   docker run --name tomcat1 -d -p 808

檢視Linux系統ApcheNginx MySQL PHP 版本

1.檢視Linux版本: 1、uname -a; 2、more /etc/issue; 3、cat /proc/version; 2.檢視Mysql版本: 1、 在終端下執行 mysql -V

CentOS 7 firewalld新增開放埠及重啟apachenginxmysqlphp-fpm命令 & CentOS 6.5開放埠方法

How to resolve the error message belowFailed to issue method call: Unit firewalld.service is masked. The main reason a service is masked is to prevent acc

Linux下通過logrotate定時清理壓縮軟體日誌,如mysqlnginxtomcat

tomcat日誌如果放任不管,那麼日誌檔案會越來越大,檢視起來也不方便。另外,如果catalina.out的大小超過了2G,那麼tomcat可能在沒有錯誤提示的情況下崩潰、無法啟動。 所以為了避免出現這個問題,我們應該每天分割catalina.out,logrotate就

java叢集之redis sentinelnginxsession共享配置詳解

說明 1、看此篇文章之前,你需要對spring 基礎,redis等相關技術基礎. 2、redis 服務端使用2主2從,分佈交叉部署至2臺伺服器,且分佈部署2臺tomcat web應用,兩臺伺服器分別部署2臺nginx來實現負載均衡。 3、你需要對叢集的概念有所

ApacheNginxTomcatPHP的區別

linuxapachenginxApache、Nginx、Tomcat、PHP的區別Apache和Nginx算是市面上兩款比較強大的WEB服務軟件。Apache的優點:支持模塊多,功能多運行穩定性強支持PHP模塊,無需安裝其他多余的組件就可以實現.php動態頁面的解析地址重寫功能(rewrite)強大Ngin

[原創]在Centos7.2上源碼安裝PHPNginxZentao禪道

session zip nss markdown src roo -perm mbstring 復制 版本 操作系統:CentOS Linux release 7.2.1511 (Core) PHP:5.6.33 Nginx:1.12.2 MySQL:5.6.38(192

小程序後臺配置 --- CentOS 7.3 64nginxnode.js

工作 數據 同時 本地 ane get 端口 域名解析 time 小程序後臺配置 目的 配置一個小程序後臺的開發、發布環境,同時保留頂級域名另作他用。 需求: 一個域名 一個主機 一個小程序賬號 系統和軟件 這裏使用CentOS 7.3 64位系統和nginx、node

IIsNginxApache三大主流web服務器偽靜態的詳細設置過程

IIs Nginx Apache 偽靜態 偽靜態什麽設置 此文章裏面的內容就包含了IIs、Nginx、Apache三大主流web服務器偽靜態詳細的設置。 文章地址http://blog.51cto.com/lccee/2068828IIs、Nginx、Apache三大主流web服務器偽靜態

三大主流軟件負載均衡器對比(LVSNginxHAproxy)

LVS、Nginx HAproxy LVS: 1. 抗負載能力強,性能高,能達到F5的60%,對內存和CPU資源消耗比較低 2. 工作在網絡4層,通過VRRP協議(僅作代理之用),具體的流量是由linux內核來處理,因此沒有流量的產生。 3. 穩定,可靠性高,自身有完美的熱備方案(K