性能优化_服务器死机问题

性能优化_服务器死机问题

ID:14393832

大小:17.86 KB

页数:3页

时间:2018-07-28

性能优化_服务器死机问题_第1页
性能优化_服务器死机问题_第2页
性能优化_服务器死机问题_第3页
资源描述:

《性能优化_服务器死机问题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、导致服务器死机的原因有很多现在慢慢罗列:1.数据库连接没释放或者JDBC操作类写得不够好没有及时释放连接数据库连接对象指的是Connection,PreparedStatement,ResultSet把他们搬回到局部变量中去,老老实实地采用最为普通办法。你的这个所谓的数据库连接文件,有大量的地方需要改动。1,DataSource可以弄成成员变量,因为这个从JNDI上得到的实例只要实例化一次就行了;2,不要把数据库连接对象当作是普通变量传来传去的,标准的做法应该是这样的:publicListgetAllStudents

2、(){Connectioncon=null;PreparedStatementps=null;ResultSetrs=null;Liststudents=newArrayList();try{con=ConnectionFactory.getConnection();Stringsql="SELECTs.id,s.name,s.ageFROMStudents";ps=con.prepareStatement(sql);rs=ps.executeQuery();while(rs.next()){Stu

3、dentstu=newStudent();stu.setId(rs.getInt("id"));stu.setName(rs.getString("name"));stu.setAge(rs.getInt("age"));students.add(stu);}}catch(SQLExceptione){....}finally{JdbcUtil.close(rs,ps,con);}returnstudents;}数据库连接资源是竞争度最高的资源,这个资源是非常宝贵的,必须使用完成后立即将其关闭(还回连接池中),相对于数据库连接资源而已

4、,局部变量的创建可以忽略不计,由于定义是局部变量,因此也不存在线程安全的问题。定义成局部变量可以让需要连接的时候立刻获得连接,用完之后立即关闭,根本不会出现像楼主那种占用160多个连接的状况。2.对程序操作的优化pojo操作数据库的粒度首先得弄清楚,做的是应用程序,也就是在操作数据库的最小粒度应定为POJO的对象,而不是数据库连接对象。实际上指的就是:如果要通过学号查找学生的姓名,我们的方法很可能会定义成这样:publicStringgetStudentNameBySno(Integersno);这样的操作粒度就不是一个POJO对象,

5、而是POJO对象中的一个属性,这样的方法非常不灵活,比如改天要增加一个通过学号获得这个学生的数学成绩呢?所以应该把方法定义成这样:publicStudentgetStudentBySno(Integersno);这样所实现的最小粒度就是个POJO对象。当然了,我们操作的应是POJO对象,如果不是做类库设计的话,严禁把数据库连接对象通过方法传来传去的。3.参考一下几点找出原因1.连接池,推荐,配置一下就可以,简单。2.缓存,涉及到你具体的业务逻辑,3.记录慢查询,做针对性的优化,如索引等4.如果是网站,部分访问量较高,变化不大的页面可以

6、做静态化。根据你说的情况,建议优化顺序:1->3->2->4最主要是先找到慢的原因。4.对一般JavaBean及一些代码的优化对JavaBean的优化:(1)尽量使用final修饰符定义类。被final修饰的泪是不可派生的,并且意味着该类中的所有方法被final修饰。在这种情况下,Java编译器会内联(inline)所有被final修饰的方法,这将大大提升软件性能。(2)尽量使用局部变量。方法的入口参数和方法中的临时变量都保存在栈(Stack)中,速度较快。而其他变量,如静态变量和实例变量,都保存在堆(Heap)中,速度较慢。(3)避

7、免在同一个类中通过调用函数或方法访问变量。例如:publicclassTest{ privateintvalue; publicintgetValue(){ returnvalue; } publicintsetValue(intvalue){ this.value=value; } publicvoidprint(){ this.setValue(16); System.out.println(this.getValue); }}建议修改为:publicclassTest{ privateintvalue; publicintget

8、Value(){ returnvalue; } publicintsetValue(intvalue){ this.value=value; } publicvoidprint(){ value=16; System.o

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。