小改动大效果:记一次CPU负载高问题排查和解决
2011-09-26 23:14
344 查看
问题缘起:收到运维同事发来的邮件,说自上次网站更新后,CPU使用率上升趋势明显(下图中红框部分所示),但网站访问数并没有增加。
简单代码示例
需要特别说明的一点,此次优化在增加缓存的同时,还做了一个小调整,将数据从xml文件读到DataTable后,为DataTable设置了主键“dt.PrimaryKey = new DataColumn[] { dt.Columns["newcode"], dt.Columns["agentid"] }”,为DataTable设置主键可以大大提高select查询效率(这点有些类似于数据库中表的主键)。因为这次修改了两个地方,增加主键的效率不好用数据说明。但之前做过一个复杂报表的生成,在内存中要对DataTable做大量查询,简单的增加主键后,效率提升了七八倍。
缓存在编程中至关重要,网站访问量小时缓存与否影响不大,一旦量上来了,再简单的逻辑也需要多考虑,平日里要多有些思想意识在里头,才会有预见性,减少上线后出现问题的几率。
简单代码示例
/// <summary> /// 获取置业专家列表 /// </summary> /// <returns>置业专家列表</returns> public static DataTable GetAgentXML() { DataTable dt = null; string cacheName = "agentall_zyzj"; if (CacheManager.IsCached(cacheName)) { object o = CacheManager.GetCache(cacheName); if (o != null) { dt = o as DataTable; } } if (dt == null) { //读取xml文件到DataTable中 dt = GetAgentXMLFromFile(); if (dt != null) { try { if (dt.Rows.Count > 0) { dt.PrimaryKey = new DataColumn[] { dt.Columns["newcode"], dt.Columns["agentid"] }; } } catch { } CacheManager.InsertCache(cacheName, dt, System.DateTime.Now.AddMinutes(60)); } } return dt; } /// <summary> /// 判断是否为置业专家 /// </summary> /// <returns>是否为置业专家</returns> public static bool CheckZyzj(long agentID, long newCode) { DataTable Agentdt = new DataTable(); bool isZyzj = false; try { Agentdt = GetAgentXML(); if (Agentdt != null && Agentdt.Rows.Count > 0) { DataRow[] drs = Agentdt.Select(" agentid=" + agentID + " and newcode=" + newCode); if (drs != null && drs.Length > 0) { isZyzj = true; } } } catch (Exception ex) { isZyzj = false; } return isZyzj; }
需要特别说明的一点,此次优化在增加缓存的同时,还做了一个小调整,将数据从xml文件读到DataTable后,为DataTable设置了主键“dt.PrimaryKey = new DataColumn[] { dt.Columns["newcode"], dt.Columns["agentid"] }”,为DataTable设置主键可以大大提高select查询效率(这点有些类似于数据库中表的主键)。因为这次修改了两个地方,增加主键的效率不好用数据说明。但之前做过一个复杂报表的生成,在内存中要对DataTable做大量查询,简单的增加主键后,效率提升了七八倍。
缓存在编程中至关重要,网站访问量小时缓存与否影响不大,一旦量上来了,再简单的逻辑也需要多考虑,平日里要多有些思想意识在里头,才会有预见性,减少上线后出现问题的几率。
相关文章推荐
- java 一次CPU占用过高问题的排查及解决
- 一次诊断和解决CPU利用率高的问题分析
- HBase一次慢查询请求的问题排查与解决过程
- 一次诊断和解决CPU利用率高的问题分析
- 一次磁盘负载比较高问题排查
- 记录一次cpu 100%线上问题排查
- [Android]浮层视频效果,在另外一个Window使用SurfaceView无法正常显示的问题排查与解决
- HBase一次慢查询请求的问题排查与解决过程
- 记一次java程序CPU占用过高问题排查
- oracle 一次诊断和解决CPU利用率高的问题分析
- 记一次tomcat进程cpu占用过高的问题排查记录
- 一次 Oracle 算出运算溢出问题 排查解决 (并非除数为零!)
- 记一次死锁问题的排查和解决
- 一次网站负载问题的解决
- 解决PaintEvent时候CPU负载过高的问题
- 记一次解决mongodb CPU占用高的问题
- java实战CPU占用过高问题的排查及解决
- 一次线上机器load负载过高报警问题排查及其后续处理
- 记一次死锁问题的排查和解决