免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: chenrvmldd

来个猛的问题-大家共同思考 [复制链接]

论坛徽章:
0
发表于 2011-03-22 08:25 |显示全部楼层
回复 9# accessory


    关键有一个版本的源码找不到了

论坛徽章:
0
发表于 2011-03-22 08:26 |显示全部楼层
回复 10# 陈灌溪


    在新版本下一个线程也创建不了,如果我通过ulimit -s 1024修改过stack的大小之后就可以创建了,所以我觉得应该是和内存有很直接的关系

论坛徽章:
0
发表于 2011-03-22 08:52 |显示全部楼层
这个跟linux的内存管理有关系,其内存管理与windows不同。以linux为例,是有多少内存尽量用,其对空闲的物理内存设置一个阀值,如果小于该阀值才会将一些进程的缓冲区给替换出来,否则进程将会一直保存缓冲区的。也许就是2.4和2.6在设置该阀值上是有不同的。还有这个用free一般是不能够准确的知道内存有多少是空闲的。个人理解,仅供参考

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
发表于 2011-03-22 08:54 |显示全部楼层
本帖最后由 amarant 于 2011-03-22 08:58 编辑

说说我的理解,本人菜鸟,说错了请指点

因为内核线程用的前一个进程mm_struct自己本身没有用户空间(指前3GB的空间)。通过ulimit -s 1024就可以增加了,ulimit是设置用户空间的栈吗,内核线程是没有用户空间的,所以瓶颈肯定就是你的那几个用户空间的程序了。

我觉得可以自己写一个模块测试下每个进程所用的地址空间,找出是哪个进程的问题先。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
发表于 2011-03-22 08:59 |显示全部楼层
回复 13# steven_miao


    你说的没错,但是还有内存回收算法,不可能因为缓存而影响创建新进程吧

论坛徽章:
0
发表于 2011-03-22 09:15 |显示全部楼层
回复 13# steven_miao


    你说的这个情况我也考虑过,我想在系统一起来的时候就加载一个模块,此模块的主要功能就是调用try_to_free_pages()来释放内存,可是我的模块下载到嵌入式系统运行的时候会报unresolved symbol

论坛徽章:
0
发表于 2011-03-22 09:16 |显示全部楼层
回复 14# amarant


   哥们也测试过了,和用户进程没有关系,在系统起来的时候我通过kill把所有的用户进程全部Kill掉了

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
发表于 2011-03-22 09:24 |显示全部楼层
回复 17# chenrvmldd


    把用户进程全杀了,内存还没释放吗?那跟你设置栈大小内解决不是矛盾了吗。(BTW,不太熟悉ulimit,这个应该是设置用户空间的栈吧,内存的栈大小好像是在编译的时候改变的)

论坛徽章:
0
发表于 2011-03-22 09:44 |显示全部楼层
回复 18# amarant


    内存释放肯定是释放了,但是释放的就是用户进程占用的那些内存

论坛徽章:
0
发表于 2011-03-22 12:24 |显示全部楼层
这个不一定是用户进程而是系统进程,在《嵌入式Linux内存与性能详解》中对此讲述了,还不错,可以看看!最好的办法就是自己改内核!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP