今天分析项目中进程中虚存一直增长问题,运行10个小时虚存涨到121G ,RSS占用为16G 非常恐怖。

顺便查了下Linux单进程能创建线程的上限,以及相关内容。内存32G 64bit系统信息如下:

Linux线程使用方式是主进程依据请求的多少动态创建和退出线程。通过pmap -x pid查看进程内个部分内存分配情况:

发现大量如下占用:

通过查询可知[anon]为未实际分配的内存,即虚存;通过如下命令计算出一共有11946个,每个对应10M总大小为 119460≈119G

1 cat process_info.txt |grep 10240|wc -l

好到此大概定位到,是这个部分虚存占用过多;

查看系统进程虚存限制:

从倒数第二项可知,系统对进程虚存无限制。栈大小为10M 刚好和[anon]每一项的大小相等,现在怀疑是线程创建后未释放内存

返回去查看代码,发现每个工作线程都调用了pthread_exit了,后面再进一步分析发现链接线程中在调用pthread_exit之前未调用pthread_detach,

导致线程虽然调用了pthread_exit,但是系统并不会真正释放线程所占资源。

总结

两种解决方式:

1.创建线程设置线程属性为

1 pthread_attr_init(&attr);

2 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

2.在线程函数第一行调用

1 pthread_detach(pthread_self());

顺便查看了下系统中如下信息:

查看系统进程和线程数上限:

进程上限为:32768

进程内的线程上限为:514960  计算方式为512G/10M = 512*1024M/10M = 52428.8 和系统显示的差距比较大,这个原因不明。。等有时间在进一步查证。。

原文:http://www.cnblogs.com/ibyte/p/5901381.html

linux强行退出线程,Linux 多线程编程--线程退出相关推荐

  1. Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)

    本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...

  2. 多线程编程—线程池的实现

    多线程编程-线程池的实现 执行与任务分离的组件- 线程池 https://github.com/wangbojing/threadpool 多线程技术主要解决了处理器单元内多个线程执行的问题,它可以显 ...

  3. 金九银十:线程、多线程,线程池面试题十连问!

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 大家好我是小于哥啊,最近的面试中,关于线程.多线程,线程池相关的面试题还是挺多的.今天我 ...

  4. delphiXE关于线程和多线程、线程的同步与异步执行

    delphiXE关于线程和多线程.线程的同步与异步执行 一.最好的参照案例 {$BDS}\source\fmx\FMX.Helpers.Android.pas 如下四个独立方法: type   TMe ...

  5. linux 线程_Linux 多线程编程(不限Linux)

    前言 线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步.互斥,这些东西将在本文中介绍.我在某QQ群里见到这样一道面试题: 是否熟 ...

  6. Linux多线程编程-线程函数返回值(返回简单数据类型)

    引言 通过几个实验练习,学习线程之间连接的具体实现.下面列举了两个例子,一个是子线程返回简单数据类型:另一个是子线程返回复杂数据类型. 实现代码 子线程返回简单的数据类型 #include<st ...

  7. linux条件变量唤醒丢失,多线程编程精髓(三)

    本篇主要讲Linux环境下的多线程同步内核对象. (1)linux线程同步之互斥体:linux互斥体的用法与windows的临界区对象类似,使用数据结构 pthread_mutex_t表示互斥体对象( ...

  8. auto.js停止所有线程_Java多线程编程基础知识 概念介绍,以及线程状态

    一.进程 进程是操作系统结构的基础:是一次程序的执行:是一个程序及其数据在处理机上顺序执行时所发生的活动.操作系统中,几乎所有运行中的任务对应一条进程(Process).一个程序进入内存运行,即变成一 ...

  9. Java多线程编程——线程同步与线程安全问题及synchronized关键字

    在多线程环境下,我们常常需要让多个线程同时去操作同一资源.在某些情况下,这种情形会导致程序的运行结果出现差错.专业上的,当多个线程在执行同一段代码的时候,每次的执行结果和单线程执行的结果都是一样的,不 ...

  10. C++11多线程编程--线程创建

    参考资料 adam1q84 我是一只C++小小鸟 Thread support library Book:<C++ Concurrency in Action> 线程的创建 线程的创建有多 ...

最新文章

  1. anaconda -spyder报错解决-UnicodeDecodeError: 'gbk' codec can't decode byte 0x93 in position 611: illegal
  2. java 异步事件_处理异步事件的三种方式
  3. Paper:Xavier参数初始化之《Understanding the difficulty of training deep feedforward neural networks》的翻译与解读
  4. wxWidgets:wxInfoBar类用法
  5. 网页按钮跳转位置_阻止safari从网页跳转至app
  6. python中time库是什么意思_python中time库的time.time()函数的作用是什么
  7. Spring中的Spring JSR-250 注释
  8. iOS 钥匙串的基本使用
  9. java的制造商,国内某通信设备制造商JavaEE开发岗面试题
  10. Nginx 502 Bad Gateway 错误的原因及解决方法
  11. js判断url链接是否可访问(服务可连接,可用)
  12. python 单一继承定义_Python学习之单继承与多继承
  13. JavaScript实现斐波那契数列(Febonacci Array)
  14. php将pdf保存文件到本地,将生成的PDF文件存储在服务器上
  15. Windows 7 With SP1 MSDN版 含简体中文版
  16. sql重命名数据库_SQL重命名数据库
  17. 第三章 垃圾回收的一些概念
  18. 服务器操作记录21/11/19
  19. python解释器错误
  20. 美术集网校—多点透视如何运用于绘画中?学会透视增加绘画体积感!

热门文章

  1. php 导出excel 数字,PHP导出excel时数字变为科学计数的解决方法
  2. 五大主流浏览器内核以及国内常见的几种浏览器内核总结
  3. kali下一键破解wifi密码
  4. 2019年共享充电宝行业发展情况分析报告
  5. 28.java中Java8.0的新特性(附讲解和练习)
  6. python手机版做小游戏代码大全-用Python设计一个经典小游戏
  7. CIM系统与MES系统介绍
  8. 机器人系统辨识——基于MATLAB的非线性系统辨识
  9. 微信小程序wxParse使用说明
  10. 解决戴尔电脑禁用无线网络问题