如果C盘还有一部分组成空间,那么也有可能是后台运行的文软件或者别的运行文件过大。亦或者是运行的软件超出了CPU所能负荷的强度,也可能是不符合现在所要的配置,那么到一定程度就可能会彻底卡死,直接蓝屏,这是要注意的一点。
如果一开始开机没什么问题,就是运行那些软件有问题,那么就说明问题出现在软件上面,所以最好要定期清理后台缓存垃圾,以及不要将下载好的软件路径安装在C盘上,最好是定期将C盘进行信息,怎么内最好留下大部分的空间。
而在下载软件的时候,最好是下载符合电脑的配置版本的软件,不要超负荷下载,毕竟电脑的运行也是有限的,超负荷下载长期往下来只会使电脑越来越容易老化。
所以如果能开机清空的话尽可能清空,如果现在是已经开机特别困难的话,最好是先把能保存的软件和文件先保存下来,然后进行格式化清除一下,如果实在连开机都开不到,建议最好是进行一次刷机,重装系统也就是相当于比格式化更高级一些的处理,这样的话就不会那么卡了。在IIS6下,经常出现w3wpexe的内存及CPU占用不能及时释放,从而导致服务器响应速度很慢。
解决内存占用过多,可以做以下配置:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。再设置当内存占用超过多少(如500M),就自动回收内存。
解决CPU占用过多:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的CPU监视,不超过25%(服务器为4CPU),每分钟刷新,超过限制时关闭。
根据w3wp取得是那个一个应用程序池:
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池。(iisapp实际上是存放在C:\windows\system32目录下的一个VBS脚本,全名为iisappvbs,如果你和我一样,也禁止了Vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“Microsoft (r) Windows Based Script Host”来执行,就可以得到PID与应用程序池的对应关系。)
3、到iis中察看该应用程序池对应的网站,就ok了,做出上面的内存或CPU方面的限制,或检查程序有无死循环之类的问题。 E9虚拟主机,VPS80G只需86元/月>一、引子
对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。
二、问题复现
线上系统突然运行缓慢,CPU飙升,甚至到100%,以及Full GC次数过多,接着就是各种报警:例如接口超时报警等。此时急需快速线上排查问题。
三、问题排查
不管什么问题,既然是CPU飙升,肯定是查一下耗CPU的线程,然后看看GC。
31 核心排查步骤
1执行“top”命令:查看所有进程占系统CPU的排序。极大可能排第一个的就是咱们的java进程(COMMAND列)。PID那一列就是进程号。
2执行“top -Hp 进程号”命令:查看java进程下的所有线程占CPU的情况。
3执行“printf "%x\n 10"命令 :后续查看线程堆栈信息展示的都是十六进制,为了找到咱们的线程堆栈信息,咱们需要把线程号转成16进制。例如,printf "%x\n 10-》打印:a,那么在jstack中线程号就是0xa
4执行 “jstack 进程号 | grep 线程ID” 查找某进程下-》线程ID(jstack堆栈信息中的nid)=0xa的线程堆栈信息。如果“"VM Thread" os_prio=0 tid=0x00007f871806e000 nid=0xa runnable”,第一个双引号圈起来的就是线程名,如果是“VM Thread”这就是虚拟机GC回收线程了
5执行“jstat -gcutil 进程号 统计间隔毫秒 统计次数(缺省代表一致统计)”,查看某进程GC持续变化情况,如果发现返回中FGC很大且一直增大-》确认Full GC! 也可以使用“jmap -heap 进程ID”查看一下进程的堆内从是不是要溢出了,特别是老年代内从使用情况一般是达到阈值(具体看垃圾回收器和启动时配置的阈值)就会进程Full GC。
6执行“jmap -dump:format=b,file=filename 进程ID”,导出某进程下内存heap输出到文件中。可以通过eclipse的mat工具查看内存中有哪些对象比较多。
32 原因分析
1内存消耗过大,导致Full GC次数过多
执行步骤1-5:
多个线程的CPU都超过了100%,通过jstack命令可以看到这些线程主要是垃圾回收线程-》上一节步骤2
通过jstat命令监控GC情况,可以看到Full GC次数非常多,并且次数在不断增加。--》上一节步骤5
确定是Full GC,接下来找到具体原因:
生成大量的对象,导致内存溢出-》执行步骤6,查看具体内存对象占用情况。
内存占用不高,但是Full GC次数还是比较多,此时可能是代码中手动调用 Systemgc()导致GC次数过多,这可以通过添加 -XX:+DisableExplicitGC来禁用JVM对显示GC的响应。
2代码中有大量消耗CPU的 *** 作,导致CPU过高,系统运行缓慢;
执行步骤1-4:在步骤4jstack,可直接定位到代码行。例如某些复杂算法,甚至算法BUG,无限循环递归等等。
3由于锁使用不当,导致死锁。
执行步骤1-4:如果有死锁,会直接提示。关键字:deadlock步骤四,会打印出业务死锁的位置。
造成死锁的原因:最典型的就是2个线程互相等待对方持有的锁。
4随机出现大量线程访问接口缓慢。
代码某个位置有阻塞性的 *** 作,导致该功能调用整体比较耗时,但出现是比较随机的;平时消耗的CPU不多,而且占用的内存也不高。
思路:
首先找到该接口,通过压测工具不断加大访问力度,大量线程将阻塞于该阻塞点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)