我经常在手中拿着一个内存条手链,以彰显我是计算机深入挖掘专家,它就是一个象征,类似摸金符,有它代表你有资格可以探墓了。

同事找到我说:“我们有一台服务器,内存资源持续高位运行,经常浮动在80%左右,系统重启后会好一些,不过持续不了太久。”

服务器是云服务器:8G内存,发生问题时,大约5GB内存消失了,但合计所有进程的内存工作集也不到3G,消失的内存何在?

好吧,进入远程登录看看实际情况吧

在任务管理器与Process Explorer中将所有进程工作集排序并汇总后,得到的结果就是我们没有任何程序使用这么大的内存

不及格的程序员-八神

不及格的程序员-八神

发生这种奇怪诡异的事情在Windows已经见怪不怪了,因为进程管理不是理想的内存探察器,有些系统内存资源它是感知不到的,你不能指望它来计算系统正在使用的内存,除非你想掉入无止尽的黑洞时间,到头来一场空,浪沸大量人生。

有经验的Windows运维专家到这里就会知道,如果上面没有你想要的结果,那么这背后可能有不可告人的秘密在发生,来自下面几个原因之一:

1 Sql Server 内存缓冲池,SqlServer如果客户请求量巨大,它会吞掉你所有可用物理内存,直到系统到崩溃的边缘。

2 Hyper-V虚似机 Dynamic Memory 占用内存

3 某些系统驱动程序内存泄漏(如:某个版本的Ati catalyst control center,或是某个品牌的网卡驱动程序)

4 第三方大型服务器程序:Logitech Media Server

我们使用正确的工具软件是探察这些问题的先决条件,要有好的罗盘,口决,驴踢子

到微软网站下载RAMMap, VMMap ,借用这两个软件我发现Sql Server偷偷占用大量的内存,下图只是例子:如果你看到了满屏黄色条状private Data,恭喜。

进入数据库的内存设定页面,将最大内存调整到较小的数值,系统内存的压力立杆见影,马上就下降了,由此断定此问题正是SQLServer触发的。

如何设置这个最大服务器内存是个技术活,因为系统上还有许多程序需要大量内存,除非你这台服务器就SqlServer独占资源,你可以将90%的内存给它用。

需要注意:

  设置最大服务器内存,不代表SqlServer申请内存资源不会超过这个数值,它只是缓存数据池的内存大小,SqlServer还有许多占用内存的组件是不包含在内的
有时你会怀疑我明明设置了最大服务器内存,为什么在资源管理下看到SQLServer申请的内存已经超过此值,你没看错,SqlServer是内存大户,内存池只是它需要用的一部分,多数数据库都有一个成名秘技就是减少磁盘IO,代价就是更多的内存。

经过上面分析,告之同事要么升级内存购买更多,要么忍着,并将最大服务内存适当调低些。

找几个倒霉的客户程序,在代码里多加几个Sleep,当它们觉得慢的受不了时,你告之需要升级系统数据库了,原因你们的数据大到服务器快装不下了。。。

Windows服务器高物理内存占用问题排察的更多相关文章

  1. Windows服务器java.exe占用CPU过高问题分析及解决

    最近在测试一个用java语言实现的数据采集接口时发现,接口一旦运行起来,CPU利用率瞬间飙升到85%-95%,一旦停止就恢复到40%以下,这让我不得不面对以前从未关注过的程序性能问题. 在硬着头皮查找 ...

  2. Windows服务器高并发处理IOCP(完成端口)详细说明

    一. 完成端口的优点 1. 我想只要是写过或者想要写C/S模式网络服务器端的朋友,都应该或多或少的听过完成端口的大名吧,完成端口会充分利用Windows内核来进行I/O的调度,是用于C/S通信模式中性 ...

  3. 谈谈我的windows服务器运维管理

    我们开发的页游General War(http://gw.gamebox.com)上线运营也有半年多了,服务器的开发到运维基本都由我一手包办,在服务器上线之后我们又招了一个程序员接手后续功能的开发,而 ...

  4. 解决一个 MySQL 服务器进程 CPU 占用 100%解决一个 MySQL 服务器进程 CPU 占用 100%的技术笔记》[转]

    转载地址:http://bbs.chinaunix.net/archiver/tid-1823500.html 解决一个 MySQL 服务器进程 CPU 占用 100%解决一个 MySQL 服务器进程 ...

  5. 如何查看Windows服务器运行了多长时间

    前言:有时候管理.维护Windows服务器需要定期重启服务器(为什么需要重启,你懂的),但是这个"定期"有时候会受很多因素影响,例如某台服务器忘了重启:某台服务器那个时间段业务繁忙 ...

  6. Windows服务器上使用bat定时执行php

    windows上和linux上有一个类似的cmd和bat文件,bat文件类似于shell文件,执行这个bat文件,就相当于依次执行里面的命令(当然,还可以通过逻辑来实现编程),所以,我们可以利用bat ...

  7. 部署AlwaysOn第一步:搭建Windows服务器故障转移集群

    在Windows Server 2012 R2 DataCenter 环境中搭建集群之前,首先要对Windows服务器故障转移集群(Windows Server Failover Cluster,简称 ...

  8. Windbg分析高内存占用问题

    1. 问题简介 最近产品发布大版本补丁更新,一商超客户升级后,反馈系统经常奔溃,导致超市的收银系统无法正常收银,现场排队付款的顾客更是抱怨声声.为了缓解现场的情况, 客户都是手动回收IIS应用程序池才 ...

  9. Windows服务器防火墙配置规范

    本文属于一篇内部规范文档,整理的初衷是为了规范.统一集团的Windows服务器(仅仅SQL Server数据库服务器)防火墙设置,仅仅供内部其它同事设置Windows防火墙时作为参考的文档资料.如有不 ...

  10. Windows 服务器部署 asp.net core

    踩坑日记与 Windows 服务器部署 asp.net core 指南. 准备 操作系统:Windows Server 2008 R2 或更高版本 文件: Microsoft Visual C++ 2 ...

随机推荐

  1. 项目实训 DAY17-18

    第一天,与后端的同学交接,先跟他说了怎么安装依赖库,弄完后他那边运行有些问题. 第二天,后端的同学说可以运行但无法部署,我思考后一起商量着只做静态模型(本身不同的两张图片只有input有区别),然后添 ...

  2. varchar(100)和varchar(10)的区别

    mysql存储字段"abcdef",varchar(10)和varchar(100)都可以存储,且占用的磁盘存储空间是一样的,磁盘是按照实际长度存储.但,如果需要排序等内存操作,加 ...

  3. vue项目安装淘宝镜像一直失败,解决办法

    这个问题纠缠了我好几天,刚开始把npm,node卸载了重装,发现还是一样的问题,最后发现是权限不够,下面这个方法完美解决 失败原因:没有用管理员权限执行, 解决办法:找到安装nodejs安装的路径,再 ...

  4. Python pexpect 库的简单使用

    一.Python pexpect 库的使用 在终端中许多命令都有与用户交互的场景,例如切换用户时需要手动输入密码,安装应用有时要输入默认配置等.这对 shell 自动化脚本十分不便.expect 命令 ...

  5. transition实现元素动画平移

    效果: 将灰色背景区域移除屏幕,并实现动画效果 代码: 使用transition属性可定义平移的时间,巧用calc得出非确定高度元素的平移距离

  6. python 如何实现多线程

    今天本来打算学习学习多进程的,但是由于我现在的电脑没有Linux系统,无法通过Linux系统编辑一些多进程的程序,因此我打算从多线程入手. 多线程 我们的程序一般都是多任务的,如果你没有好好的利用好, ...

  7. Ubuntu-18.04.1-live-server-amd64.iso安装全过程

    以下向你介绍安装Ubuntu-18.04.1-live-server-amd64.iso版本的全过程,同时要说明的是Ubuntu 18.04.1 server版本只能通过文本的方式安装,即它没有和Ub ...

  8. 数据库自动备份,crontab定时任务

    查看crontab运行状态service crond status 查看当前用户的crontab,输入 crontab -l: 编辑crontab,输入 crontab -e: 删除crontab,输 ...

  9. JAVA 学习打卡 day2

    2022-04-23 16:43:32 1.字符类型 (1)字符和整型之间的相互转换 给字符变量赋值可以使用数值和字符,它们都可以使程序正确地运行.要注意的是,字符要用一对单引号('')括起 (2)常 ...

  10. 1011.Django状态保持以及表单

    一.session保持状态 状态保持: 1. http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态: 2. 客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服 ...