Atitit.软件开发提升稳定性总结
Atitit.软件开发提升稳定性总结
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
#----影响稳定性几个类别
1. 资源和内存泄漏溢出
2. 数据库/文件死锁
3. 类库冲突
4. 热更新热部署(业务可用性
5. 程序崩溃
6. 磁盘空间/cpu/内存占用过高
#-----影响稳定性的因素
7. 内存泄漏溢出
有时gc不起生效..可以调用native方法释放内存.
new memory().start();监测内存占用,当物理内存占用超过此值M时,调用SetProcessWorkingSetSize方法回收内存。
8. 数据库连接泄漏
连接池自动关闭连接,简化开发,,同时提升性能..
9. 数据库死锁
避免多个线程/请求/事务修改同一个记录..
不使用事务或者使用单语句事务
要是必须使用事务,需要调整代码.
Dbms 可以探测到死锁,但是不能自动释放死锁,需要监测程序自动解锁锁死的连接..(要是数据库被多个应用使用,要修改驱动/或者使用反射尝试,记录此应用打开的连接端口,到数据库端过滤,在执行解锁)
10. 类库冲突,造成部署问题
需要工具检测
11. 热更新的支持不足,部署比较麻烦
Classloader?? Resin glassfish等web服务器检测...jboss支持有限的热部署.
12. Web服务跟数据库服务崩溃
数据库服务启用服务监测,自动恢复..Web服务单个的进程,需要寻找个监测程序或者安装为服务.
13. 非托管资源的释放
托管资源交给GC就好,非托管资源则必须使用框架来自动回收 或者 亲自写代码回收
14. 其他的潜在隐患:
15. 多线程并发读写死锁
压力测试解决.
16. 子线程异常造成主线程崩溃(java不影响,.net有这个问题)
抛出线程,线程体内要TRY CATCH。。否则抛出EXP导至主程序OUT。。特别重要,一定要做.
17. 文件并发读写
18. 别的网络socket连接释放问题...
19. 直接内存读写
20. Stream的关闭释放.
21. native method调用的内存
finalize()中可以用本地方法来调用它。以释放这些“特殊”的内存空间。
22. 磁盘空间不足,造成许多的莫名其妙的问题.也许提示连接耗尽..
解决:添加监测程序
#----解决方法归类总结
23. 更简化的开发架构(热更新热部署)..
24. 更好用的第三方框架类库
25. 类库冲突避免(ide,检测工具,开发时,运行时)
26. 引擎+脚本结构(c++,java+python,lua,php等)
27. 最佳推荐流程(避免死锁跟解除)
28. 更简化的编程语言
29. 提升稳定性的内部封装框架/类库
30. 自动资源释放池
31. 监测,warnning,跟自动恢复
32. 压力测试
33. 容错(包括自动重连)
34. 语言级的新的特性
35. 故障集群
#----解决方法总结
36. php/.net
Php的自动释放资源做的非常好,几乎所有的的问题都解决了...同级的脚本语言ruby几乎和php同时起步,python更是早好几年,,最终市场php应用最广泛(c系列的语言风格也很重要,跟c++,java 一脉相承)...ruby/python解决了热更新跟类库冲突,但是好像都没解决自动释放资源的问题.
Java 也可以使用Quercus类库内嵌python/Php/js,内嵌方式能不能自动释放资源还没有检验
.net也解决了部分稳定性问题.(主要是热更新跟类库冲突,但是没解决资源自动释放的问题) ,不过ide vs的强大大大提升了2倍以上的开发效率.
37. 建立基于提升稳定性的内部封装框架/流程文档
全面代替系统默认库和常使用第三方库,从框架级角度解决一些问题,,会损失一点儿性能跟灵活性..需要的时候儿也能直接使用系统库...
建立api文档已便查看..
38. Finalize/Dispose
finalize()的主要用途是释放一些其他做法(non--new法)开辟的内存空间,以及做一些清理工作
使用code template配合ide自动生成Finalize框架方法
39. 容错(包括自动重连)
40. SoftReference
java .lang.ref 包,其中定义了三种引用类。这三种引用类分别为SoftReference、 WeakReference和
41. 连接池的配置: 自动超时回收Connection+超时自动断开conn
c3p0.checkoutTimeout=10000
c3p0.unreturnedConnectionTimeout=25
c3p0.maxConnectionAge=20
42. 超时回收资源gc
需要建立框架,比较简单的超时自动回收资源.可以解决大部分问题...使用code template配合ide自动import 自定义类库代替系统类库.
43. 语句块回收资源/using块中自动调用Dispose
44. 崩溃时候儿core dump并且重启
Java的调用oom自动恢复脚本..
PRPGRAM。CS内要TRY CATCH,发现主程序出问题,重启。
PROGRAME。CS内增加UnhandledException 的捕获..
45. 日志,缓存等文件,尽可能按时间生成多个文件。。
可以防止万一个哪个文件句柄没被释放,也不会影响后面的文件写入。
46. 重要业务服务和页面gui监测
可以及时发现服务out service
47. 监测程序(cpu,内存占用, io队列深度, 磁盘空间,数据库连接数,数据库死锁监测)
提前发现不稳定性因素...
48. 网络,文件操作使用wrap类库secury方式调用
默认的sdk库使用一定要TRYCATCH。
49. 死锁自解除(数据库,文件等)
#----压力测试
当前项目虽然并发不大(当前200左右,默认的配置可支持5000左右)...
但是压力测试可以提前测试出稳定性方面的问题..
常常使用工具jmeter,LoadRunner等
Atitit.软件开发提升稳定性总结的更多相关文章
- Atitit.软件开发的三层结构isv金字塔模型
Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...
- Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义
Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...
- Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向
Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向 1. 一个伟大的事业必然是过程导向为主 1 1.1. 过程的执行情况(有明确的执行手册及标准) ...
- Atitit.软件开发的非功能性需求attilax 总结
Atitit.软件开发的非功能性需求attilax 总结 1. 运行环境约束:用户对软件系统运行环境的要求. 1 2. 兼容性 2 3. 7.6 数据库 database (imp by ati) ...
- Atitit.软件开发的非功能性需求attilax 总结At
Atitit.软件开发的非功能性需求attilax 总结 1. 运行环境约束:用户对软件系统运行环境的要求. 1 2. 兼容性 2 3. 7.6 数据库 database (imp by ati) ...
- Atitit.软件开发的几大规则,法则,与原则Principle v3
Atitit.软件开发的几大规则,法则,与原则Principle v31.1. 修改历史22. 设计模式六大原则22.1. 设计模式六大原则(1):单一职责原则22.2. 设计模式六大原则(2):里 ...
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform 1. Absoluti 布局(经常使用) 1 2. ...
- Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode
Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode 不个网页title保存成个个文件的时候儿有无效字符的问题... 通常两个处理方式 ...
- Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php
Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php 1. RFC2396标准 including HTML 4.01 section ...
随机推荐
- 同一web系统,不同端口的跨域问题
部署web系统的时候,发现了跨域问题,子系统是用Iframe嵌入到系统里面的,导致父窗口获取子系统的webService和图片时发现跨域问题,如下图所示:问题1:父窗口获取子系统的对象跨域 原因:用这 ...
- System.IO中的File、FileInfo、Directory与DirectoryInfo类(实例讲解)
一.建立的文件夹(对这些文件进行以上四个类的操作): 父目录: 父目录的子目录以及父目录下的文件: 子目录下的文件: 二.效果图 三.代码实现 using System; using System.I ...
- SQLServer语句 汇总
SQL Server语句 序号 功能 语句 1 创建数据库(创建之前判断该数据库是否存在) if exists (select * from sysdatabases where name='data ...
- wpf 旋转效果
<Grid> <Grid.Triggers> <EventTrigger RoutedEvent="Page.Loaded"> <Begi ...
- sql server 2000通过机器名可以连,通过ip连不上的问题
客户那边两台服务器A和B,之前一直都是好好的,今天因为换了网络环境,结果数据库之间不能相互访问了. 目前只能A访问B,B访问不了A,在服务器A上面试了,通过ip连本机,也是连接超时. 开始想着是服务器 ...
- mac下sublime text3安装SFTP及使用
mac下sublime text3安装SFTP 1.shift+command+p进入控制面板 2.输入install进入程序安装界面选择需要安装的插件(SFTP) 3.直接进行安装(需要联网) 4. ...
- Python.Scrapy.14-scrapy-source-code-analysis-part-4
Scrapy 源代码分析系列-4 scrapy.commands 子包 子包scrapy.commands定义了在命令scrapy中使用的子命令(subcommand): bench, check, ...
- sql语句练习50题
Student(Sid,Sname,Sage,Ssex) 学生表 Course(Cid,Cname,Tid) 课程表 SC(Sid,Cid,score) 成绩表 Teacher(Tid,Tname) ...
- 关于collapsed margin(外边距合并)
这是前面写postion定位时写到最后面的例子的时候发现的一个问题,于是专门写一篇随笔来解释记录一下,毕竟两个知识点同时写在一篇文章里面有点混乱的感觉.. 上篇随笔position定位遇到的问题在这里 ...
- Java入门1dayCode
public class HelloWorld { /* * 多行注释方式 * main()方法: java语言的入口方法(函数) */ public static void main(String[ ...