linux服务器并发与tcmalloc
前一天使用pmap查看服务器中自己开发的游戏服务的内存使用情况,发现其中数据存储服务的内存占用率非常高,截图如下。
从截图中可以看出来,分配了大量的64MB左右的内存空间,因为对自己的服务比较了解,知道不可能是自己程序开辟的,而且进程才刚刚启动,也不可能是内存泄露。
所以第一时间想到的是我的服务是多线程并发的,而且开辟的不知名的内存块的数量和线程数也比较吻合,将线程数减少,发现内存也就跟着减少,基本可以肯定是线程导致的。
但是线程为什么会导致这么多内存块的使用,google一下,有一篇文章写得和我的情况非常类似。http://chou.it/tag/pmap/
可能是glibc的线程内存分配的问题,建议使用tcmalloc。
于是从网上下载了gperftools-2.1-28.2.x86_64.rpm,和libunwind-1.1-94.3.x86_64.rpm, unwind是gperftools依赖的一个库,所以需要一起下。
gperftools是google开发的一套开源工具,其中包含tcmalloc。
然后在程序链接的时候,将tcmalloc加入进去之后,我使用的是cmake方式编译,就是添加一行TARGET_LINK_LIBRARIES(xxx tcmalloc),如果用makefile就是-ltcmalloc即可
重新编译,然后运行程序之后,重新使用pmap查看内存使用情况,发现内存使用回归到合理的状态。
linux服务器并发与tcmalloc的更多相关文章
- 修改Linux内核参数提高Nginx服务器并发性能
当linux下Nginx达到并发数很高,TCP TIME_WAIT套接字数量经常达到两.三万,这样服务器很容易被拖死.事实上,我们可以简单的通过修改Linux内核参数,可以减少Nginx服务器 的TI ...
- Linux(Centos )的网络内核参数优化来提高服务器并发处理能力【转】
简介 提高服务器性能有很多方法,比如划分图片服务器,主从数据库服务器,和网站服务器在服务器.但是硬件资源额定有限的情况下,最大的压榨服务器的性能,提高服务器的并发处理能力,是很多运维技术人员思考的问题 ...
- [记录]优化Linux 的内核参数来提高服务器并发处理能力
优化Linux 的内核参数来提高服务器并发处理能力PS:在服务器硬件资源额定有限的情况下,最大的压榨服务器的性能,提高服务器的并发处理能力,是很多运维技术人员思考的问题.要提高Linux 系统下的负载 ...
- Linux服务器程序--大数据量高并发系统设计
在Linux服务器程序中,让系统能够提供以更少的资源提供更多的并发和响应效率决定了程序设计价值!怎样去实现这个目标,它其实是这么多年以来一直追逐的东西.最开始写代码时候,省去一个条件语句.用 ...
- linux服务器分析优化
转:http://jiekeyang.blog.51cto.com/11144634/1774473 一.系统性能分析 1.系统的性能是指操作系统完成任务的有效性.稳定性和响应速度.操作系统完成任务与 ...
- linux服务器性能优化
1.这里的吞吐率特指Web服务器单位时间内处理的请求. 2.压力测试的前提:1>并发用户数 2>总请求数 3>请求资源描述 3.用户平均请求等待时间主要用户衡 ...
- 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群
高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...
- 高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化
高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...
- Linux服务器集群系统(二)--转
引用地址:http://www.linuxvirtualserver.org/zh/lvs2.html LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 ...
随机推荐
- lucene字典实现原理——FST
转自:http://www.cnblogs.com/LBSer/p/4119841.html 1 lucene字典 使用lucene进行查询不可避免都会使用到其提供的字典功能,即根据给定的term找到 ...
- [转]无IDE时编译和运行Java
本文由 ImportNew - Grey 翻译自 dzone.欢迎加入Java小组.转载请参见文章末尾的要求. 最近 Java subreddit 出现了一篇”在没有IDE的情况下编译Java包” 的 ...
- 陈朱兴-js写法【案例】:
ajax请求: 一.从服务器端请求数据: var url = '';url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='+ ...
- windows下捕获dump之守护进程
一两个月前为产品写了一个独立的exe,由于产品使用的捕获dump是一个现成的进程外exe,如果以资源的方式集成它容易出现安全警告,由于时间关系没有寻求新的解决方法,还是遵循旧方案,不捕获dump. 最 ...
- apache日志轮转
apache默认的日志配置为: ErrorLog "logs/error_log" CustomLog "logs/access_log" co ...
- js打印对象(object)
function printObject(obj){//obj = {"cid":"C0","ctext":"区县"}; ...
- NDK JNI 的关键点
1.System.loadLibrary 的名字是在Android.mk里面设定的 LOCAL_MODULE := httpdown,MODULE 后面跟的就是了 2.如何正确调用到关键 ...
- DP 剪枝
DP其实也是和搜索一样可以有剪枝的,昨晚看到一个超级好的DP剪枝题:(HDU - 5009) N段东东,要染色,每次给一个区间染色需要的花费为 该区间颜色总数的平方. 每一段只能被染一次色.求 最 ...
- 常州培训 day5 解题报告
第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程 ...
- 解决:操作无法完成(错误0x00000709)。再次检查打印机名称,并确保打印机已连接到.
就是重启一下服务器端的Print Spooler服务就行了,这么简单! [控制面板 - 服务 - Print Spooler]