背景
最近有一个压测任务,比较物理机和容器云机器上服务的性能。前提是两台机器的配置CPU、内存都一样,且都是独占机器,但是压测结果大跌眼镜物理机QPS居然连640都扛不住,而容器云机器能扛到2000。理论上来讲物理机性能肯定是比容器云好的,但这究竟是为什么呢?经多方定位发现rd同学在编译代码过程中设置jemalloc参数失败,后重新设置重新压测果然物理机性能优于容器云性能。至于为什么物理机更优秀当然是因为容器云的硬件资源是在软件层模拟出来导致的喽,虚拟机没有硬件实体,而物理机有实体。也就是说,物理机是有实体的硬件系统,比如服务器等,而虚拟机是借助物理机虚拟出虚拟的硬件系统。
jemalloc作用
jemalloc is a general purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support
意思是说jemalloc干了malloc干的活,而且干得好一些,主要体现在避免内存碎片与并发扩展上。
jemalloc安装并使用
- 下载:https://github.com/jemalloc/jemalloc/releases
- 下载包地址:jemalloc-4.2.1
-
tar -xjvf jemalloc-4.2.1.tar.bz2
生成的文件列表如下:
image.png - 在此目录下预编译
./configure –prefix=/usr/local/jemalloc
5.编译:make -j8 && make install
生成的头文件在include里,库在lib里。
使用
在编译链接时直接指向jemalloc即可:
gcc -g -c -o 1.o 1.c
gcc -g -o 1.out 1.o -L/usr/local/jemalloc/lib -ljemalloc
运行程序时可能会报找不到库:
image.png
只要将jemalloc的库被系统找到即可:
echo /usr/local/jemalloc/lib >> /etc/ld.so.conf
ldconfig
重新运行即可
网友评论