用jemalloc优化nginx、mysql内存管理
- 2016-07-21 10:41:14
- 运维
- 23
- shevechco
jemalloc是一个内存分配器,最开始出现在FreeBSD上的libc中,FreeBSD最早使用phkmalloc,但它不是在多处理器系统且支持多线程的情况下设计的,为了解决多处理器系统和多线程应用程序的可扩展性瓶颈,由此诞生jemalloc,它是Jason Evans 2005年进行开发的,因此叫"je"。在2007年的时候为了改善Firefox在3.0版中的内存使用情况,使用jemalloc解决了在Windows平台上的碎片问题,同时也给jemalloc带来了许多通用的增强功能。
jemalloc在多处理器和多线程系统中具有很强的可扩展的并发支持,部分是通过使用多个arenas 来实现(从中进行分配原始内存块),并且以循环方式将线程分配给arenas。这意味着可以减少锁竞争,因为尽管多个线程可以并发调用malloc或free,但只有在它们共享相同的arenas时才会竞争。jemalloc强调避免碎片,它会尝试连续分配内存并且最大程度地减少内存使用总量。
由于CPU缓存,RAM和虚拟内存分页的影响,内存布局可能会对应用程序其余部分的运行速度产生重大影响。
接下来我们看看如果使用,首先下载jemalloc
wget -c http://www.canonware.com/download/jemalloc/jemalloc-4.2.1.tar.bz2 tar jxvf jemalloc-4.2.1.tar.bz2 cd jemalloc-4.2.1 ./configure make make install echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf ldconfig
MySQL/MaridDB 5.5编译方法,cmake预编译时加上下面参数
-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -DWITH_SAFEMALLOC=OFF
或者直接加载,修改mysqld_safe
sed -i 's@executing mysqld_safe@executing mysqld_safe\nexport LD_PRELOAD=/usr/local/lib/libjemalloc.so@' /usr/local/mysql/bin/mysqld_safe service mysqld restart
使用jemalloc优化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-ld-opt="-ljemalloc" make make install
验证jemalloc优化Nginx是否生效,如下
lsof -n | grep jemalloc
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:http://www.sulao.cn/post/239
相关推荐
- flask使用nginx代理以后图片上传和加载问题解决方法
- mysql8登录报错Host '127.0.0.1' is not allowed to connect...
- python使用peewee(ORM)操作mysql数据库
- nginx反向代理http/https、rpc/grpc、ws/wss
- nginx四层负载均衡配置解析以及卡顿问题的处理
- centos7部署k8s多master高可用集群(k8s+containerd+nginx+keepalived)
- k8s部署ingress-nginx
- docker部署keepalived非抢占单播模式
- MySQL CPU占用过高的排查方法
- k8s部署Mysql