删除文件报IOException,经常引起服务宕机

这是个很逗的事情,删除一个文件还能引起服务宕机。
猜想:如何查看服务器宕机的原因
  a、是否是应用程序导致内存溢出或者泄露,out of memory导致
  b、是否是进程过多或者不断创建,耗尽资源导致
  c、是否是数据库程序死锁,连接数过多导致
  d、是否是应用程序异常导致
  e、是否是流量负载过大导致
  f、 是否是遭受黑客入侵攻击导致
  g、是否是误操作导致

1、java.lang.OutOfMemoryError: PermGen space
2、java.lang.OutOfMemoryError: Java heap space

如果出现java.lang.OutOfMemoryError: Java heap space异常,说明Java虚拟机的堆内存不够。原因有二:

  1. Java虚拟机的堆内存设置不够,可以通过参数-Xms、-Xmx来调整。
  2. 代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)。

如果出现java.lang.OutOfMemoryError: PermGen space,说明是Java虚拟机对永久代Perm内存设置不够。

  1. 一般出现这种情况,都是程序启动需要加载大量的第三方jar包。例如:在一个Tomcat下部署了太多的应用。从代码的角度,软件开发人员主要关注java.lang.OutOfMemoryError: Java heap space异常,减少不必要的对象创建,同时避免内存泄漏。
ps -mp 9004 -o THREAD,tid,time,rss,size,%mem

遗憾的是,发现PS命令可以查到具体进程的CPU占用情况,但是不能查到一个进程下具体线程的内存占用情况。

幸好Java提供了一个很好的内存监控工具:jmap命令

jmap [pid]
//jmap -histo:live [pid] 可以查看当前Java进程创建的活跃对象数目和占用内存大小。
jmap -histo:live [pid] >a.log
//jmap -dump:live,format=b,file=xxx.xxx [pid]则可以将当前Java进程的内存占用情况导出来,方便用专门的内存分析工具(例如:MAT)来分析。
jmap -dump:live,format=b,file=xxx.xxx [pid]

总结下排查CPU故障的方法和技巧有哪些:

  1. top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。
  2. PS命令:Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。
  3. jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。
  4. pstack:Linux命令。可以查看某个进程的当前线程栈运行情况。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容