常见故障及其解决方法

目录

一、内存冲高

1.原因

2.解决方法

(1)查看内存状态使用命令:top

(2)查看缓存命令:free

(3) 内存泄漏和内存溢出

二、死锁


一、内存冲高

1.原因

(1)进程占用过多

(2)缓存占用过高

(3)内存泄漏和内存溢出

2.解决方法

(1)查看内存状态使用命令:top

(2)查看缓存命令:free

缓冲(buffer): 当我们操作需要从磁盘中读取文件时,内核先查看文件是否在缓存中,如果在的话,直接读取,就不需要再从磁盘中读取。如果不在,内核就会调度块I/O去磁盘中读取,然后内核将读来的数据放在缓存中。

缓存(cache): 当我们需要写入文件到磁盘中,不会直接写入到磁盘中,会先写入到缓存中,用来减少对磁盘的I/O操作。

free和available: 两个都是空闲内存,不过free表示真正没有被使用的物理内存数量,而available则表示从应用程序的角度看到的可用内存数量。

Linux内核为了提升对磁盘的操作性能,会消耗一部分内存去缓存磁盘中的数据,就是buffer和cache,所以对于内核来说,这两个都是属于已经被使用的内存,当应用程序需要内存时,没有足够的free内存,内核就会从缓存中国后手内存来满足应用程序。

buffer与cache的区别:两者都是RAM中的数据。

buffer是用于存放要输出到disk(块设备)的数据的,

cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。

手动释放cache中的内存

在释放前,可以使用sync命令,将内存中的数据强制写入到磁盘中,避免数据丢失

(3) 内存泄漏和内存溢出

内存泄漏:是指程序在申请内存后,无法释放已申请的内存空间,多个程序申请内存后,会导致内存空间不足。

内存溢出:

程序申请内存时,没有足够的空间供其使用,出现内存溢出。内存泄漏最终会导致内存溢出。

内存泄漏可以分成4类

①常发性内存泄漏: 发生内存泄漏的代码会被多次执行到,每次执行的时候都会导致一块内存泄漏。

②偶发性内存泄漏: 发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生,长发性和偶发性是相对的,对于特定的环境,偶发性的也许就变成了长发性,所以测试环境和测试方法对检测内存泄漏至关重要。

③一次性内存泄漏: 发生内存泄漏的代码只会被执行一次,由于算法上的缺陷,导致总会有一块仅且有一块内存发生泄漏。

④隐式内存泄漏: 程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存,严格的说这里并没有发生内存泄漏,因为最终程序释放了所申请的内存,但是对于一个服务器程序,需要运行几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。

内存溢出的原因
①内存中加载的数据过于庞大,如一次从数据库读取过多的数据,内存供给不足,导致内存溢出。

②集合类中有对对象的引用,使用完后未清空,使得JVM(运行java代码的容器,相当于一台java虚拟机),不能回收。

③代码中存在死循环或循环产生过多重复的对象实体。

④使用第三方软件的bug

⑤启动参数内存设定的过小。

详细内容:内存压力过高怎么处理_Ggggggggggu的博客-CSDN博客

                运维常见命令(二)内存不足报警_bohu83的博客-CSDN博客
如何排查线上内存飙高问题_程序员内卷指南的博客-CSDN博客_线上内存占比过高怎么排查

Linux服务器之内存过高解决思路_Jeremy_Lee123的博客-CSDN博客_linux内存使用率高怎么解决

二、死锁

1.死锁:事务之间互相等待对方(AB-BA问题)。
2.排查死锁:用锁的信息链表、事务等待链表画成图,若图存在回路【深度优先遍历算法判断回路】则说明死锁。
3.解决:按DFS判出回路后,把 undo 量最小的事务给回滚掉。

详细内容:2021年2月社招面经分享_Java资深/高级开发_Victor _Lv的博客-CSDN博客

你可能感兴趣的:(运维,服务器)