Atitit.软件开发提高稳定性总结php
#----影响稳定性几个类别 3java
1. 资源和内存泄漏溢出 3python
3. 类库冲突 3web
7. 内存泄漏溢出 3ruby
16. 子线程异常形成主线程崩溃(java不影响,.net有这个问题) 4
22. 磁盘空间不足,形成许多的莫名其妙的问题.也许提示链接耗尽.. 5
25. 类库冲突避免(ide,检测工具,开发时,运行时) 6
26. 引擎+脚本结构(c++,java+python,lua,php等) 6
41. 链接池的配置: 自动超时回收Connection+超时自动断开conn 7
43. 语句块回收资源/using块中自动调用Dispose 8
47. 监测程序(cpu,内存占用, io队列深度, 磁盘空间,数据库链接数,数据库死锁监测) 8
48. 网络,文件操做使用wrap类库secury方式调用 8
做者 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
有时gc不起生效..能够调用native方法释放内存.
new memory().start();监测内存占用,当物理内存占用超过此值M时,调用SetProcessWorkingSetSize方法回收内存。
链接池自动关闭链接,简化开发,,同时提高性能..
避免多个线程/请求/事务修改同一个记录..
不使用事务或者使用单语句事务
要是必须使用事务,须要调整代码.
Dbms 能够探测到死锁,可是不能自动释放死锁,须要监测程序自动解锁锁死的链接..(要是数据库被多个应用使用,要修改驱动/或者使用反射尝试,记录此应用打开的链接端口,到数据库端过滤,在执行解锁)
须要工具检测
Classloader?? Resin glassfish等web服务器检测...jboss支持有限的热部署.
数据库服务启用服务监测,自动恢复..Web服务单个的进程,须要寻找个监测程序或者安装为服务.
托管资源交给GC就好,非托管资源则必须使用框架来自动回收 或者 亲自写代码回收
压力测试解决.
抛出线程,线程体内要TRY CATCH。。不然抛出EXP导至主程序OUT。。特别重要,必定要作.
finalize()中能够用本地方法来调用它。以释放这些“特殊”的内存空间。
解决:添加监测程序
Php的自动释放资源作的很是好,几乎全部的的问题都解决了...同级的脚本语言ruby几乎和php同时起步,python更是早好几年,,最终市场php应用最普遍(c系列的语言风格也很重要,跟c++,java 一脉相承)...ruby/python解决了热更新跟类库冲突,可是好像都没解决自动释放资源的问题.
Java 也可使用Quercus类库内嵌python/Php/js,内嵌方式能不能自动释放资源尚未检验
.net也解决了部分稳定性问题.(主要是热更新跟类库冲突,可是没解决资源自动释放的问题) ,不过ide vs的强大大大提高了2倍以上的开发效率.
全面代替系统默认库和常使用第三方库,从框架级角度解决一些问题,,会损失一点儿性能跟灵活性..须要的时候儿也能直接使用系统库...
创建api文档已便查看..
finalize()的主要用途是释放一些其余作法(non--new法)开辟的内存空间,以及作一些清理工做
使用code template配合ide自动生成Finalize框架方法
java .lang.ref 包,其中定义了三种引用类。这三种引用类分别为SoftReference、 WeakReference和
c3p0.checkoutTimeout=10000
c3p0.unreturnedConnectionTimeout=25
c3p0.maxConnectionAge=20
须要创建框架,比较简单的超时自动回收资源.能够解决大部分问题...使用code template配合ide自动import 自定义类库代替系统类库.
Java的调用oom自动恢复脚本..
PRPGRAM。CS内要TRY CATCH,发现主程序出问题,重启。
PROGRAME。CS内增长UnhandledException 的捕获..
能够防止万一个哪一个文件句柄没被释放,也不会影响后面的文件写入。
能够及时发现服务out service
提早发现不稳定性因素...
默认的sdk库使用必定要TRYCATCH。
当前项目虽然并发不大(当前200左右,默认的配置可支持5000左右)...
可是压力测试能够提早测试出稳定性方面的问题..
经常使用工具jmeter,LoadRunner等