`
jack
  • 浏览: 392478 次
  • 来自: 温州
社区版块
存档分类
最新评论

项目事故和安全语言

阅读更多
  有个从表面上看起来很奇怪的事实是:司机戴安全带比不带安全带时发生的行车事故要多。不带安全带时,司机死亡率比较高,但是带了安全带时,司机死亡率是降低了,但是行人死亡率却提高了。

  不带安全带时,司机需要谨慎缓慢的开车,带了安全带,司机却会 更快,更放肆地开车。
这个方面的资料 可以看下 Automobile Safety Regulation and the Incentive to Drive Recklessly:Evidence from NASCAR 和Automobile Safety Regulation

  编程语言,从一种不安全语言(比如c/c++)发展到一种相对安全语言(比如C#)时,语言上安全程度提高,并不因此能够大量的减少项目事故,只能减少对开发人员威胁程度而已。而对于客户平均威胁程度却是提高了。

   安全性高的语言,就像司机有了安全带一样,使得原本那些担心做不好而使得自己饭碗不保地不合格开发人员更加-------放肆了。

  同样的项目 用c/c++开发,开发人员知道c/c++极易出错,开发速度故而缓慢,谨慎。尽量避免在开始就出错。项目运行时,初期出错。小错误还好,如果是系统崩溃之类的错误,有麻烦的是开发人员。

  用C#开发,则因为C#和.net平台有各种各样的保证机制。相对不容易出错,比如c/c++中最麻烦的内存,资源回收和指针问题。项目运行初期也很难发现.等运行一段时间之后,出错了很有可能就需要重新设计了。

  开发语言虽安全,请各位"新人司机"缓慢,谨慎驾驶。
分享到:
评论
99 楼 robbin 2006-09-28  
charon 写道

但是这个只能说明物理内存在被消耗。但是无法说明被哪个进程消耗了。
hehe. 这是个死无对证的事情牙


那停掉PHP之后,为什么一切恢复正常,启动PHP,内存就持续泄漏?

这不算证据?

如果你知道一个房子里面只有一个人,然后另外一个人进去了,等他出来以后,手里拿着把血淋淋的刀,屋子里面的人已经死了。你会怎么想?你会说死无对证,屋子里面的人根本就不是那个拿刀的人杀的吗?
98 楼 charon 2006-09-28  
robbin 写道


VM = swap + resident, but  swap=0
charon 写道

swap和resident都不增加,那怎么判断出来用户进程在申请内存?
有没有试过pmap? 所有分析内存好用的工具中,这个是我见过最强悍的


watch cat /proc/meminfo


但是这个只能说明物理内存在被消耗。但是无法说明被哪个进程消耗了。
hehe. 这是个死无对证的事情牙
97 楼 ddd 2006-09-28  
呵呵,问题在我看来已经是free到底反应的是什么的问题了,可能本质都和apache无关了。
96 楼 robbin 2006-09-28  
ddd 写道
嘿嘿,我去查查资料去(top和free到底反映的是什么信息),可能 要继续:)
因为我听一个玩apache+php很长时间的人说过,apache就是这个样子,时间长了占用一大堆内存(他没说占用的内存性质是什么,估计也是free查看的内存),但不影响性能。

我感觉迂回了这么一个大圈子(因为我一直从你机器已经无法对外反应出发的,没想到你只是预测到有可能出问题就直接重起了),现在可能才到点子上。


看贴不仔细,我已经说了我用lighttpd+fastcgi+php也跑过了,照样泄漏,而且泄漏的更快,apache+mod_php泄漏的速度还慢点。

以前用32位Linux跑了三年的网站,apache+mod_php,从来就没有出现什么时间长了占用一大堆内存的现象。

free少不是问题,一般来说,Linux Kernel会尽量多利用free memory来做disk cache,所以经常出现disk cache使用了2GB,free只有几十MB都是正常的。但不管怎么说,你只要计算一下:

free + buffer + cache 这三项相加是没有被resident的物理内存,应该等于 物理内存 - resident。如果不相等,那就绝对是出现问题了。




95 楼 ddd 2006-09-28  
嘿嘿,我去查查资料去(top和free到底反映的是什么信息),可能 要继续:)
因为我听一个玩apache+php很长时间的人说过,apache就是这个样子,时间长了占用一大堆内存(他没说占用的内存性质是什么,估计也是free查看的内存),但不影响性能。

我感觉迂回了这么一个大圈子(因为我一直从你机器已经无法对外反应出发的,没想到你只是预测到有可能出问题就直接重起了),现在可能才到点子上。
94 楼 robbin 2006-09-28  
charon 写道
robbin 写道
charon 写道
robbin 写道

那用户进程光吃不吐,同时用户自己的resident还不增加,难道你不觉得蹊跷?进程吃进去的内存它弄到哪里去了?


resident内存不增加正常啊
分配的是VM的内存,resident指的是实际占用的物理内存。


VM = swap + resident, but  swap=0


swap和resident都不增加,那怎么判断出来用户进程在申请内存?
有没有试过pmap? 所有分析内存好用的工具中,这个是我见过最强悍的


watch cat /proc/meminfo
93 楼 charon 2006-09-28  
robbin 写道
charon 写道
robbin 写道

那用户进程光吃不吐,同时用户自己的resident还不增加,难道你不觉得蹊跷?进程吃进去的内存它弄到哪里去了?


resident内存不增加正常啊
分配的是VM的内存,resident指的是实际占用的物理内存。


VM = swap + resident, but  swap=0


swap和resident都不增加,那怎么判断出来用户进程在申请内存?
有没有试过pmap? 所有分析内存耗用的工具中,这个是我见过最强悍的
92 楼 robbin 2006-09-28  
ddd 写道
>要不重起,第二天物理内存用光了怎么办?能肯定网站都访问不了哇。

那你真的曾经到物理内存用光了并且速度极慢的时候了么?


没有,当内存被泄漏3.5GB的时候我就断然采取措施了。万一物理内存耗尽,同时网站不停有访问请求,导致其他用户进程得不到内存分配,后果是极其严重的!

以前在晓钢服务器就出现过这类问题,某程序没有限制上传文件大小,导致被恶意上传多个大文件,很快就把物理内存耗尽,连ssh都登录不上去,只能打电话给机房,要求机房工作人员重起。

[这个话题不想再回复了,感觉我在科普中...]
91 楼 ddd 2006-09-28  
>要不重起,第二天物理内存用光了怎么办?能肯定网站都访问不了哇。

那你真的曾经到物理内存用光了并且速度极慢的时候了么?
90 楼 robbin 2006-09-28  
charon 写道
robbin 写道

那用户进程光吃不吐,同时用户自己的resident还不增加,难道你不觉得蹊跷?进程吃进去的内存它弄到哪里去了?


resident内存不增加正常啊
分配的是VM的内存,resident指的是实际占用的物理内存。

引用

RES is resident memory usage, i.e. what's actually in the memory. In a way it could be probably used for measuring real memory usage of the app - if the app requests 100M memory from the kernel but actually uses only 1M, this should increase only by 1M. There are only two small problems, a) RES doesn't include memory that's swapped out (and no, the SWAP field in 'top' is not usable, it's completely bogus), b) some of that memory may be shared.


VM = swap + resident, but  swap=0
89 楼 robbin 2006-09-28  
ddd 写道
>我也没有说过PHP内存泄漏造成服务器变慢,事实上速度一点都不慢。

那你为什么晚上要重新启动机器?好奇,仅仅是好奇


要不重起,第二天物理内存用光了怎么办?能肯定网站都访问不了哇。
88 楼 charon 2006-09-28  
robbin 写道

那用户进程光吃不吐,同时用户自己的resident还不增加,难道你不觉得蹊跷?进程吃进去的内存它弄到哪里去了?


resident内存不增加正常啊
分配的是VM的内存,resident指的是实际占用的物理内存。

引用

RES is resident memory usage, i.e. what's actually in the memory. In a way it could be probably used for measuring real memory usage of the app - if the app requests 100M memory from the kernel but actually uses only 1M, this should increase only by 1M. There are only two small problems, a) RES doesn't include memory that's swapped out (and no, the SWAP field in 'top' is not usable, it's completely bogus), b) some of that memory may be shared.
87 楼 ddd 2006-09-28  
>我也没有说过PHP内存泄漏造成服务器变慢,事实上速度一点都不慢。

那你为什么晚上要重新启动机器?好奇,仅仅是好奇
86 楼 ddd 2006-09-28  
你这个机器出现的问题蹊跷的地方不是一个两个,我搞不懂原因具体是什么,只是划分一下责任而已。
85 楼 robbin 2006-09-28  
ddd 写道
3、如果是kernel内存管理问题,为什么同样的方式来跑,PHP就泄漏,ruby就不泄漏?(Java程序也不泄漏)
我不知道ruby是不是来一个请求就开一个进程,如果不是,这可能就是区别。

4、在用户进程运行过程中,用户进程不停向kernel申请更多的内存,但是却从来不回吐内存,同时用户进程自己的resident内存却一丁点都不增加!这分明是用户进程自己的内存管理出问题的迹象,而不可能是kernel的问题。kernel只负责分配内存给用户进程,回收用户进程吐出来的内存。如果用户进程自己光吃不吐,你能说是kernel的问题?
free只是读/proc/mem内容,top是怎么统计出来的我不清楚,在一般情况下二者应该大致一致,为什么会出现不一致我说不清楚。
用户进程光吃不吐自然用户进程毛病,但进程关掉后还没吐出来是内核毛病。


PHP两种运行方式我都试过了,一种方式是apache的mod_php方式,这种方式和运行ruby不一样,另外一种是用fastcgi方式跑PHP,这种方式和用fastcgi跑ruby的方式是完全一致的。但是无论如何PHP它就是泄漏,ruby就是不泄漏。这种证据让我无法怀疑是kernel的问题。

那用户进程光吃不吐,同时用户自己的resident还不增加,难道你不觉得蹊跷?进程吃进去的内存它弄到哪里去了?

84 楼 ddd 2006-09-28  
3、如果是kernel内存管理问题,为什么同样的方式来跑,PHP就泄漏,ruby就不泄漏?(Java程序也不泄漏)
我不知道ruby是不是来一个请求就开一个进程,如果不是,这可能就是区别。

4、在用户进程运行过程中,用户进程不停向kernel申请更多的内存,但是却从来不回吐内存,同时用户进程自己的resident内存却一丁点都不增加!这分明是用户进程自己的内存管理出问题的迹象,而不可能是kernel的问题。kernel只负责分配内存给用户进程,回收用户进程吐出来的内存。如果用户进程自己光吃不吐,你能说是kernel的问题?
free只是读/proc/mem内容,top是怎么统计出来的我不清楚,在一般情况下二者应该大致一致,为什么会出现不一致我说不清楚。
用户进程光吃不吐自然用户进程毛病,但进程关掉后还没吐出来是内核毛病。
83 楼 robbin 2006-09-28  
我再来解释一下吧:

物理内存4GB = free memory + buffer + disk cache + resident(系统进程和用户进程占用的驻留内存)

按照上面很多人的看法,只要kernel内存管理没有问题,用户进程关闭之后,内存就全部被释放,那么这个公式就应该一直是一个等式,不管用户进程多么消耗内存。

但问题就是现在的现象是这个等式不成立了!

物理内存4GB = free memory + buffer + disk cache + resident + 3GB(被泄漏掉的部分)

用户进程在运行的过程中,就已经不等了,把用户进程关闭,也只不过释放了该进程的resident,但是物理内存4GB - free memory - buffer - disk cache  = 3GB,那泄漏掉的并没有被找回来。

造成这种问题的原因无非两个:

1、kernel的内存管理有问题

2、PHP的问题

按照你们的说法,PHP再有问题,只要被关闭,内存也会被吐回来,但是现在根本就不是这种现象,因此结论就是Kernel的问题。

但我不同意这样的看法,理由有四:

1、这个kernel久经考验,我google过了,也咨询过了,从未报过kernel有这种问题。

2、我换了两个版本的Linux,两个不同小版本号的Kernel,结果全部都是内存泄漏,只不过泄漏速度稍有不同。没有可能最著名的两大商业Linux厂商Redhat和SuSE都有Kernel内存管理问题吧?那他们还混的下去?

3、如果是kernel内存管理问题,为什么同样的方式来跑,PHP就泄漏,ruby就不泄漏?(Java程序也不泄漏)

4、在用户进程运行过程中,用户进程不停向kernel申请更多的内存,但是却从来不回吐内存,同时用户进程自己的resident内存却一丁点都不增加! 这分明是用户进程自己的内存管理出问题的迹象,而不可能是kernel的问题。kernel只负责分配内存给用户进程,回收用户进程吐出来的内存。如果用户进程自己光吃不吐,你能说是kernel的问题?

82 楼 ddd 2006-09-28  
我语言错误
你关掉apache后,已被吃掉内存还处于被吃掉的状态(就是没吐出来的意思),那就是内核的错误了。

不是继续吃的意思。
81 楼 robbin 2006-09-28  
ddd 写道
我话又说回去了:php可以犯错误,可以吃掉整个物理内存。
你关掉apache后,内存还被吃,那就是内核的错误了。

这是两个错误了:
1 php大量内存泄露造成服务器狂慢
2 内核在apache消失后还有大量内存泄露,是内核的错误。

两个不一定相关,但相关的可能性存在。
就是php设计人员这么想:反正进程一结束,那些东西都回收了,但结果是内核回收失败。

内核驱动模块自然也可能造成内存泄露,这就和php一点关系没有了。但运行ruby就好好的,这个可能性也不太能存在。

所以这个问题确实摸不着头脑。


关闭apache以后,内存当然不会再吃了,也不知道你怎么看贴的。

我也没有说过PHP内存泄漏造成服务器变慢,事实上速度一点都不慢。

请仔细看我上面贴描述的现象:Apache进程(mod_php)只吃内存,不吐内存!进程关闭之后,进程当前占用的resident内存释放,但是被莫名其妙吃掉的那3GB内存不回吐,根本就无影无踪了。
80 楼 ddd 2006-09-28  
我话又说回去了:php可以犯错误,可以吃掉整个物理内存。
你关掉apache后,内存还被吃,那就是内核的错误了。

这是两个错误了:
1 php大量内存泄露造成服务器狂慢
2 内核在apache消失后还有大量内存泄露,是内核的错误。

两个不一定相关,但相关的可能性存在。
就是php设计人员这么想:反正进程一结束,那些东西都回收了,但结果是内核回收失败。

内核驱动模块自然也可能造成内存泄露,这就和php一点关系没有了。但运行ruby就好好的,这个可能性也不太能存在。

所以这个问题确实摸不着头脑。

相关推荐

    go语言项目实战源码资料

    理解如何创建和管理goroutines,以及如何通过channels进行安全的数据通信是Go语言的一大特色。 4. **网络编程**:Go语言提供了强大的net和http标准库,使得网络编程变得简单。你可能会学习到如何创建HTTP服务器,...

    Go 语言课程和项目源码

    非类型安全指针 Go语言切片 作业 Day04 重点知识回顾与答疑 Day05 字符串 Go语言Map Go语言接口 错误处理 空接口与类型断言 函数式编程 面向对象 面向接口 作业 Day06 IO操作 反射与AST 文件读写 包与工程 单元测试...

    基于python开发的Ai助手项目源码(集成了语言识别、图像识别和自然语言处理).zip

    基于python开发的Ai助手项目源码(集成了语言识别、图像识别和自然语言处理).zip基于python开发的Ai助手项目源码(集成了语言识别、图像识别和自然语言处理).zip基于python开发的Ai助手项目源码(集成了语言识别、...

    go开源项目大全(目前最完整)

    因此我自己根据go语言中文社区提供的资料,还有互联网企业架构设计中的常见组件分类, 共精心挑选了100多个开源项目(项目不限于在github开源的项目), 分成以下十几个大类。 这个项目可以理解为互联网IT人打造的...

    PanUmlTools项目一个java语言实现的

    Java是一种广泛应用于开发各种类型应用程序的编程语言,具有跨平台、面向对象、高性能和安全性等特点。Java项目可以用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序、移动应用程序和企业级应用程序等。 ...

    (完整版)项目部安全管理体系.pdf

    3. 安全标准与程序:制定工程项目安全操作规范和流程,包含紧急应对预案和安全检查制度。 4. 安全培训与教育:定期对员工进行安全知识与技能的培训,提升安全意识和应急处理能力。 5. 安全监督与检查:开展日常安全...

    Perl语言编程.pdf

    * 不适合大型项目:Perl语言不适合用于大型项目,例如操作系统、数据库管理系统等。 * 安全性欠缺:Perl语言的安全性欠缺,需要用户小心地编写代码来避免安全问题。 Perl语言的发展历史: * 1987年,Larry Wall...

    公路水运项目工程施工企业主要负责人和安全生产管理人员考核大纲模拟试题库.doc

    同时,综合能力测试了语言沟通、规范理解、道德评价、心理承受和突发事件处理等公共基本能力,以及安全法规执行、监督、隐患排查、事故分析和信息处理等安全管理行为能力。 2. 法律法规及规章规程:考核人员需熟悉...

    基于Go语言和Gin框架的完善Web项目骨架.zip

    通过深入学习和使用这个项目骨架,开发者不仅可以掌握Go语言和Gin框架的基本用法,还能了解到如何优化应用性能,实现高效、安全的企业级服务。同时,通过研究`skeleton-main`文件,可以学习到如何组织代码结构,处理...

    建设项目的安全和职业健康“三同时”管理.pdf

    1. 建设项目安全管理制度:公司需建立完善的建设项目安全管理制度,涵盖从可行性研究、设计、施工到验收的全过程,确保所有环节遵循国家和行业的安全标准。 2. 可行性研究阶段:在项目启动初期,需对可能存在的危险...

    基于Unity3d和C#语言开发的回合制RPG游戏项目源码+sln解决方案(课程作业).zip

    1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通。 2.主要针对各个计算机相关...基于Unity3d和C#语言开发的回合制RPG游戏项目源码+sln解决方案(课程作业).zip

    基于Java语言的福建师范大学计算机与信息安全学院2021级软件工程&新意科技项目实训课程第四组设计源码

    该项目是福建师范大学计算机与信息安全学院2021级软件工程与新意科技项目实训课程的第四组设计源码,采用Java语言开发,并集成了Vue、JavaScript、CSS和HTML等多语言技术。项目包含28个文件,具体分布为7个Vue文件、...

    Rust语言相关项目的示例

    Rust是一种系统级编程语言,由Mozilla研发,旨在提供内存安全、并发性能和速度的完美平衡。这个压缩包文件“Rust语言相关项目的示例”很可能是包含了一系列使用Rust编程语言开发的实际项目实例,旨在帮助学习者深入...

    锂日历记事本-Gin后端项目,基于go语言Gin框架开发.zip

    它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如...

    基于深度学习的建筑安全事故预防策略综述.pdf

    其在计算机视觉、自然语言处理和语音识别等多个技术领域的成功应用,为建筑安全事故的预防提供了新的思路。深度学习技术能够通过多层神经网络结构,对复杂的数据进行有效建模和特征提取,从而实现对施工现场的自动...

    技术服务方案、项目实施方案及项目管理组织机构.pdf

    这个项目的技术服务方案、项目实施方案及项目管理组织机构全面覆盖了工程的各个环节,从前期的技术准备到后期的施工管理,都旨在保证工程的安全、质量和进度,同时注重环境保护和文明施工,展现了严谨的项目管理流程...

    基于Energyplus、Golang、React和R语言的建筑能耗计算系统源码+项目说明.zip

    基于Energyplus、Golang、React和R语言的建筑能耗计算系统源码+项目说明.zip 【说明】 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,...

    网络安全大语言模型.zip

    网络安全大语言模型 ----- 毕业设计,课程设计,项目源码均经过助教老师测试,运行无误,欢迎下载交流 ----- 下载后请首先打开README.md文件(如有),某些链接可能需要魔法打开。 ----- 毕业设计,课程设计,项目...

    信息安全大作业-CA系统的设计和实现源码(电子认证服务系统-数字证书数字签名python语言)+项目详细说明

    信息安全大作业-CA系统的设计和实现源码(电子认证服务系统-数字证书数字签名python语言)+项目详细说明, CA代表Certificate Authority。也就是电子认证服务或机构,为电子签名相关各方提供真实性和可靠性验证,是...

Global site tag (gtag.js) - Google Analytics