CPU使用率

事故回放

  当时的情况是那个样子的:

  1,正值饭点,客户电话说系统慢,几乎无法完成订单调度,有时还显示内存不足。当时心里的第一个声音就是,服务器配置太低了,远程一看,2核4G内存,cpu平均60%以上,内存70%以上,果然是配置低了,word哥厉害了,

不用看就知道了,果断让用户增加了配置,嘿,你别说增加了配置果然,快了不少,立竿见影,钱还真是万能。然后,欣欣然吃饭去了。

  2,过了半月,又值饭点,客户电话又说最近系统慢,再让客户增加配置吧,也不合适,为了避免打脸,我又盲目的临时增加了服务器带宽,但是然并卵。我已经知道我必须要为自己当初的草率还债了。

这些年,只知埋头写程序,这方面的东西几乎没有积累。然已经兵临城下,会不会都得上,即使前路是如一重山,两重山,山高天远还是山。   

   

确认带宽

  我们打开一个网站慢,我们首先想到的是服务器带宽问题,但是如何确认服务器的带宽是否足够呢,我学到了两个方法:看阿里云网络监控,看服务器联网情况。本来是两个天天看到的东西,愣是今天才明白,都不好意思是说自己是计算机专业毕业的了。懂的就飘过,权当我做个笔记吧,有错的欢迎斧正,不能误了别人哩。

    1,以下是阿里云网络监控数据图,服务器使用 5Mbps 带宽,说明我们的出网理论可以达到 5*1024kbps,服务器出网峰值4700多,说明够用。

  

2,也有说这个数据不是特别准确,我们也可以登录服务器远程查看联网信息,下图网络使用大概等于 0.05%*1Gbps ≈ 500kbps;

    

  

  观察了两边的数据,我确定了带宽基本够用的,再不用自己去临时升级带宽了,知识比钱还万能,解决问题还能省钱。~~^_^~~~

  

搞定内存

  内存从的来的4G,升级到8G,还是会提示内存不足,你说一天就2000多个子订单,再让别人加配置,怎么好意思呢。监控进程,发现w3wp.exe,sqlserver.exe 点的内存多,且在不断增加,直到最后程序提示内存不足时,依然还在吃内存。

  w3wp.exe 是iis的进程,一个站点会生成一个进程,也许是程序中有bug,导致内存不断增加,但是要去发现他,真不是简单的事儿。那这个进程还能无法无天了么,当然,不是!。应用程序池可以设置内存限制,这就是他的天了。如下图。

  

  sqlserver.exe 是数据库有进程,这不是费话么,看名称就知道了。他也会一直吃内存,吃到没有为止(话说他自己不把自己吃了呢),程序固然有问题,不知道他自己有没有bug呢,不管了,给他划一片天,让他插翅难飞。

当然了,这终非治标之事,权宜之计了。

  

  内存就暂时这样处理了,近期不影响使用了,要治标还是得好好查代码哩。上面的都是简单设置就Ok了,接下来才是重头戏。

降温CPU

  CPU常年在60%以上,经常还会飚到80%多,服务器自己都照顾不过来了,怎么还有心情响应别人呢。所以嘛,就慢了。(这么简单的道理,怎么现在才想明白呢。)再细看,占CPU的全是 sqlserver.exe,好吧,哪哪都少不了你的,十处打鼓,九回在。不过话又说回来, sqlserver.exe成了泼妇骂街,哪哪在,还不是你们这个帮程序员逼的么。 好吧,大哥莫说二哥,脸上麻子一样多,咱还是来相互理解吧。先上一张优化前的CPU使用率情况图,完事儿再上一个优化后的图,放一起怕是有了对比,就有了伤害。看了下图,真是惨不忍睹,平均估计得有60好几吧。

  

  sqlserver.exe 经常占很高CPU,肯定不是一处两处的问题,所以肯定不是如大海捞针一般在代码里找了,好吧,大家都知道是 数据库引擎优化顾问,具体使用就不说了吧。直接优化建议,按里创建索引之类的,这也太简单了吧,确实简单,因为也没有太大的效果。

  于是,继续看查看报告一栏,毕竟这里是真实的数据统计,每个报告都略微看了下,当看到表报告时,word哥,当时真傻眼了,管理员表居然成了引用数最多的表,这太不能接受了。真是不看不知道,一看笑一笑。笑啥呢,找到部分问题了还不让笑了么,哈哈哈。原来页面中几乎都会用到当前登录用户的信息,但每次又都是根据cookie中的id去查数据库,我说呢,果断缓存登录的账号信息(这多年了,还是这么陈旧的方式,还望有园友可以指点一二)。

  

  经过上一步后,CPU由原来常年飚高,变成经常升高,检查访问频率高的界面,结合优化报告,发现查询条件  DATEDIFF(day,OrderDateTime,GETDATE()) =0 非常可疑,这个字段本已经添加了到了非聚集索引里,但这样写后,执行计划变得

非常复杂,如果我修改成  OrderDateTime > '2016-10-26' 执行计划就简单多了。几个高频页面计划都是这样写的,以前觉得这样写非常牛,还为经常记不住函数写法而懊恼,没文化真可怕。

  再把优化报告,详情看了后,完成了一系列优化,主要也是就索引,sql语句写法等。索引吧,我是天天嚷嚷着学习,但是老是只知皮毛,悲伤中。

  把上面优化部署后,还是会偶尔突然升高CPU,猜可能是某个不是特别高频率的界面引起的,最后猜可能是后台首页,有一些统计信息。果不其然,我每刷新一次,CPU就升高了,这些统计又不能没有,怎么办呢,对了,还是缓存,这些数据也没有必要实时统计。如下图。到这里CPU终于降温了。

  

  好吧,完事儿了,好吧,还少一张优化后的使用率,安静多了吧。

  

  

结语

  以上就是这次优化的大概过程了(个中心酸,着实也不少),网站是个小网站(,好吧,大网站也轮不到我哩),啥都在一个服务器上,也许这些个三脚猫的东西入不了很多人的法眼哩。不过,对我来说还是一次满难得的经历了。

我相信我就是我,一定能火。如果能对你有帮助,十分荣幸,方便的话点个赞呗,让我也高兴下;写得不对,你能吐个槽,我也十分荣幸,如果能再指点一二,那就万分感激了。

  最后,媳妇希望把儿子的名字,写在博客里,将来他要是搜索自己的名字(别说你没干过这事儿哦),能看到这篇博客,那也是美事儿一件了。

  好吧,当妈首先还是想到的自己的娃;其实媳妇从怀孕开始,为了娃,管住了嘴,迈开了腿;爬楼梯,转公园,只为能顺产,有利于娃(虽说最后也没能顺产,付出也是蛮多);生了娃,事就更多了。这就是养儿方知父母恩了。好吧,打住了,再说下次去就是秀恩爱了。儿子名叫:戢雨泽,媳妇取的,希望将来程序比我写得好。

   成为一名优秀的程序员!

CPU使用率的更多相关文章

  1. %iowait和CPU使用率的正确认知

    resources 理解 %IOWAIT (%WIO) LINUX系统的CPU使用率和LOAD Linux Performance Observability Tools How Linux CPU ...

  2. 制造高CPU使用率的简单方法

    在群里有人问制造CPU占用率高的场景用来做测试.所谓做好事难,干“坏”事还不容易?这个需求有很多方法可以实现,比如使用一些压力测试工具.我首先想 到的是HASH JOIN.这个联接比较消耗CPU资源, ...

  3. 使用mysqlslap对mysql进行压测,观察Azure虚拟机cpu使用率

    一直想做这个测试,原因很简单,很多人一直比较怀疑Azure的虚拟机性能,说相同的配置凭啥比阿里的虚拟机贵那么多,其实,我自己以前也怀疑过,但是接触Azure的几个月,确实发现Azure的虚拟机性能真的 ...

  4. 获取Windows操作系统的CPU使用率以及内存使用率

    此功能参考了ProcessHacker项目的代码. 声明定义 typedef struct _UINT64_DELTA { ULONG64 Value; ULONG64 Delta; } UINT64 ...

  5. CPU使用率终于正常了——记一次订餐系统事故处理

    引子 经过漫长的等待,儿子终于出生了.欣喜之余,就是各种手足无措,顾此失彼了.因为不懂,心里总是慌慌的,有点小毛病,恨不得一步就到医院. 婆媳育儿观念的差异,让心乱如麻的我,又成了风箱里的老鼠,两个不 ...

  6. zabbix监控单核cpu使用率和多核cpu总负载

    zabbix自带的基础监控的模板中只有对单核cpu负载1分钟.5分钟.15分钟的监控. 添加对总的cpu负载的监控 key:system.cpu.load[all,avg1] 1分钟cpu总的负载 添 ...

  7. 如何定位死循环或高CPU使用率(linux)

    如何定位死循环或高CPU使用率(linux)  确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid ...

  8. SQLSERVER进程CPU使用率100%

    解决SQLSERVER2008 CPU使用率99%: 1.dbcc checkdb 重建索引 2.檢查有沒有死鎖 -- sp_lock SELECT request_session_id spid , ...

  9. Linux系统中CPU使用率查询常用的5个命令

    在程序开发中,我们一般都是在Linux系统上进行开发,因此对Linux系统的维护工作很重要.在Linux系统维护中,我们需要经常查看的就是cpu的使用率,分析系统的整体运行情况.那CPU使用率怎么查询 ...

  10. 嵌入式 如何定位死循环或高CPU使用率(linux) 及性能优化

    嵌入式 如何定位死循环或高CPU使用率(linux) ln -s /mnt/nfs/_install/usr/bin/sort /usr/bin/sort awk '{print $1,$2,$14, ...

随机推荐

  1. [改善Java代码]列表相等只需关系元素数据

    来看一个判断列表相等的例子,看代码: import java.util.ArrayList; import java.util.Vector; public class Client { public ...

  2. 【基本计数方法---加法原理和乘法原理】UVa 11538 - Chess Queen

    题目链接 题意:给出m行n列的棋盘,当两皇后在同行同列或同对角线上时可以互相攻击,问共有多少种攻击方式. 分析:首先可以利用加法原理分情况讨论:①两皇后在同一行:②两皇后在同一列:③两皇后在同一对角线 ...

  3. 第一次使用github很高端的赶脚

  4. Cocos2d-x中自定义粒子系统

    除了使用Cocos2d-x的11种内置粒子系统外,我们还可以通过创建ParticleSystemQuad对象,并设置属性实现自定义粒子系统,通过这种方式完全可以实现我们说需要的各种效果的粒子系统.使用 ...

  5. xcode-重新打开欢迎界面

    嫌不够逼格关掉 关掉又后悔= = 重新打开方式为: command+shift+1 然后把左下勾上就可以每次都打开了 一个字,折腾

  6. DOM_节点层次

    一.DOM1级定义了一个Node接口,这个接口是由DOM中的所有节点类型实现的.Node接口共有12种节点类型,常见的是元素节点.文本节点和文档节点. Node.ELEMENT_NODE(1);——元 ...

  7. struts2的知识

    result的类型 转向 <result type="dispatcher"> <param name="location" > ... ...

  8. jQuery动态添加元素并绑定事件

    写网页的时候常常需要根据实际情况添加新的元素,然后这些新元素还需要绑定已有的事件,如:有一ul,点击其中某 li,根据其 id 或 value 等获取新的数据列表,并新建 ul 显示,新 ul 中的 ...

  9. [GeekBand] STL与泛型编程(3)

    本篇文章主要介绍泛型算法中的变易.排序.数值算法. 一. 变易算法 所谓变易算法是指那些改变容器中的对象的操作. 1.1 copy组 template <class InputIterator, ...

  10. CVTE面试总结

    刚面完了CVTE的一面,感觉完败,现总结. 一:准备不充分 这个跟时间仓促也有关系.昨天下午收到通知,晚上九点多回来填写给定格式的简历,题目也比较多.由于时间较仓促,那些问题的答案没有过多斟酌.但糟糕 ...