如何排查服务器占用内存过高
① linux占用内存太高,有没有好的解决办法呀
且体的还得看服务器的配置。
一般有如下几种可能:
1) 有程序占用大量CPU,使用top命令来检查(看看是否有java程序锁死之类的故障)
2) 有程序占用大量内存,使得内存真正不够用了(这个才是真正需要加内存的时候),比如由于Mysql在较大负载下运行容量为GB级别的数据库导致内存不够用,需要给服务器插入更多物理内存
3) 磁盘系统读写故障,IO吞吐错误造成CPU负载上升,需要光盘引导进入单用户模式扫描修复磁盘。
但也可以手动进行内存释放,具体操作如下:
[root@dbserver01 mysql]# cat /proc/sys/vm/drop_caches0
首先,/proc/sys/vm/drop_caches的值,默认为0
[root@dbserver01 mysql]# sync
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件) 《Linux就该这么学》 一起学习。
[root@dbserver01 mysql]# echo 3 > /proc/sys/vm/drop_caches
[root@dbserver01 mysql]# cat /proc/sys/vm/drop_caches
3
将/proc/sys/vm/drop_caches值设为3 [root@dbserver01 mysql]# free -m
② SQL Server占用内存过高,什么原因导致的,用什么方法可以解决
SQL Server运行越久,占用内存会越来越大。因为sql server本身内存回收机制做的不好,这是微软系列的服务器&数据库问题的通病。
解决SQL Server占用内存过高的方法:
1.定期重启SQL Server 2008 R2数据库服务即可。
拓展资料
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。
Microsoft SQL Server 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
网络Microsoft SQL Server
③ Linux系统CPU/内存使用率过高的问题排查
服务器出现由内存问题引发的故障,例如系统内部服务响应速度变慢、服务器登录不上、系统触发 OOM(Out Of Memory)等。通常情况下当实例内存使用率持续高于90%时,可判断为实例内存使用率过高。CPU/内存使用率过高的问题原因可能由硬件因素、系统进程、业务进程或者木马病毒等因素导致。
笔者以前写过一篇文章- Linux 下的 60 秒分析的检查清单 ,适用于 任何性能问题 的分析工作,这一篇文章是关于CPU/内存使用率的具体的排查思路总结。
执行 top 命令后按 M ,根据驻留内存大小进行排序,查看 “RES” 及 “SHR” 列是否有进程占用内存过高。按 P,以 CPU 占用率大小的顺序排列进程列表,查看是否有进程占用cpu过高。
如果有异常进程占用了大量 CPU 或内存资源,记录需要终止的进程 PID,输入k,再输入需要终止进程的 PID ,按 Enter。
另外说明一下,top 运行中可以通过 top 的内部命令对进程的显示方式进行控制,最常用的是M和P。
CPU 空闲但高负载情况,Load average 是 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。执行ps -axjf命令,查看进程状态,并检查是否存在 D 状态进程。D 状态指不可中断的睡眠状态,该状态进程无法被杀死,也无法自行退出。若出现较多 D 状态进程,可通过恢复该进程依赖资源或重启系统进行解决。
Linux 系统通过分页机制管理内存的同时,将磁盘的一部分划出来作为虚拟内存。而 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。当系统内存不足时,kswapd0 会频繁的进行换页操作。换页操作非常消耗 CPU 资源,导致该进程持续占用高 CPU 资源。
执行top命令,找到 kswapd0 进程。观察 kswapd0 进程状态,若持续处于非睡眠状态,且运行时间较长并持续占用较高 CPU 资源,执行 vmstat ,free,ps 等指令,查询系统内进程的内存占用情况,重启系统或终止不需要且安全的进程。如果 si,so 的值也比较高,则表示系统存在频繁的换页操作,当前系统的物理内存已经不能满足您的需要。 si 表示每秒从交换区写入内存的大小(单位:kb/s) , so 每秒从内存写到交换区的大小。
执行cat/proc/meminfo |grep-i shmem命令查看共享内存。
buddy可以以页为单位获取连续的物理内存了,即4K为单位。slab负责需要频繁的获取/释放并不大的连续物理内存,比如几十字节。执行cat /proc/meminfo | grep -i SUnreclaim命令查看slab 内存。
标准的 4KB 大小的页面外,内存大页管理内存中的巨大的页面,处理较少的页面映射表,从而减少访问/维护它们的开销。执行cat /proc/meminfo | grep -iE "HugePages_Total|Hugepagesize" 查看内存大页。
内存使用率计算:
(Total - available)100% / Total
(Total - Free - Buffers - Cached - SReclaimable + Shmem)* 100% / Total
cat /proc/meminfo查看信息含义:
④ 服务器空间爆满的检查及处理方法
首先必须使用 ssh 工具连接服务器,在 windows 环境下推荐使用: SecureCRT
使用下面命令进行登录:
链接之后会提示输入密码,密码不可见,使用键盘输入完之后直接按回车。
如上图,存放项目的磁盘空间占用率为 40% ,项目存放路径为 /home
并不是所有的总空间都可以存放文件,所以已使用空间未达到484G 的之前占用率将会达到100%,观察空间是否爆满,主要以占用率为参考。
使用命令到达项目所在目录:
接着,使用命令到达项目备份目录:
之后,使用命令查看备份文件:
使用命令查看备份文件大小:
可以看到备份文件有大和小两种, 删除的时候请留下时间最近一次大备份
使用以下命令进行文件删除:
这个命令非常之危险,没有任何挽救的余地
一般情况,删除成功没有任何提示(没有消息就是好消息),偶尔会看到系统接收到一条新消息的提示,这个对删除操作没有影响。
之后,我们可以重复上述操作,直到留下 时间最近一次大备份 。
最后,可以用上面提到的命令确认磁盘空间。
END