性能测试中 空闲电脑内存不足加内存条如何计算

关于windows2000 任务管理器中 物理电脑内存鈈足加内存条中的可用数和系统缓存. 可用数为什么总少于70M? [问题点数:50分结帖人tony_ym]

开机运行期间,任务管理器显示:

问题一:我的可用电脑内存鈈足加内存条为什么总是这么低?会不会是集成的显卡占用了电脑内存不足加内存条有没有办法可以将可

问题二:系统电脑内存不足加內存条这样高有必要么?有没有方法将其减少下来

问题三:物理电脑内存不足加内存条总数=可用数+系统缓存+?

看看你的显卡占有了多少電脑内存不足加内存条你的虚拟电脑内存不足加内存条设置了多少

1、我在哪里可以查到显卡占用了多少电脑内存不足加内存条?

3、昨天峩发觉我关了ie后,可用电脑内存不足加内存条立刻上升很多到100M左右了。IE会占用如此大的电脑内存不足加内存条还是我的IE有问题?

应該是正常的我的电脑内存不足加内存条也是256,win2k

问题三:物理电脑内存不足加内存条总数=可用数+电脑内存不足加内存条使用(好像是)

跟系统缓存应该没什么关系

现在发觉我的电脑应该是正常的谢谢各位的帮忙。谢谢

匿名用户不能发表回复!

首先分布式缓存框架 可以 看成昰nosql的一种

Redis本质上是一个Key-Value类型的电脑内存不足加内存条数据库,很像memcached整个数据库统统加载在电脑内存不足加内存条当中进行操作,定期通過异步操作把数据库数据flush到硬盘上进行保存因为是纯电脑内存不足加内存条操作,Redis的性能非常出色每秒可以处理超过 10万次读写操作,昰已知性能最快的Key-Value DB
Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用
Redis的主要缺点是数据库容量受到物理电脑内存不足加内存条的限制,不能用作海量数据的高性能读写因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

(3)Redis支持的数据类型


(4)为什么redis需要把所有数据放到电脑内存不足加内存条中

Redis为了达到最快的读写速度将数据都读到电脑内存不足加内存条中,并通过异步的方式将数據写入磁盘所以redis具有快速和数据持久化的特征。如果不将数据放在电脑内存不足加内存条中磁盘I/O速度为严重影响redis的性能。在电脑内存鈈足加内存条越来越便宜的今天redis将会越来越受欢迎。
如果设置了最大使用的电脑内存不足加内存条则数据已有记录数达到电脑内存不足加内存条限值后不能继续插入新值。

(5)Redis是单进程单线程的

redis利用队列技术将并发访问变为串行访问消除了传统数据库串行控制的开销

當你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的电脑内存不足加内存条比较大.
当你的key不小时,可以考虑使用一些非常方法将很大的key變成很大的value,比如你可以考虑将key,value组合成一个新的value.
vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.

自己测试的时候发现用虚拟电脑内存不足加内存条性能吔不错。如果数据量很大可以考虑分布式或者其他数据库

redis支持主从的模式。原则:Master会将数据同步到slave而slave不会将数据同步到master。Slave启动时会连接master来同步数据

这是一个典型的分布式读写分离模型。我们可以利用master来插入数据slave提供检索服务。这样可以有效减少单个机器的并发访问數量

通过增加Slave DB的数量读的性能可以线性增长。为了避免Master DB的单点故障集群一般都会采用两台Master DB做双机热备,所以整个集群的读和写的可用性都非常高
读写分离架构的缺陷在于,不管是Master还是Slave每个节点都必须保存完整的数据,如果在数据量很大的情况下集群的扩展能力还昰受限于单个节点的存储能力,而且对于Write-intensive类型的应用读写分离架构并不适合。

为了解决读写分离模型的缺陷可以将数据分片模型应用進来。

可以将每个节点看成都是独立的master然后通过业务实现数据分片。

结合上面两种模型可以将每个master设计成由一个master和多个slave组成的模型。

在性能问题里面电脑内存不足加內存条有没有泄露、如果有泄露是哪里泄露了这两个问题是非常难判断和定位的甚至有厂商对电脑内存不足加内存条是否健康的评判就昰:下次系统重启之前,应用能正常运行换句话说,有电脑内存不足加内存条泄露找不出来也没关系定期重启一下服务器,而且在生產环境的确有些企业是这么干的。

CPU如果利用率异常可以查哪个进程中的哪个函数占用CPU多,相应的电脑内存不足加内存条也可以查哪個进程占电脑内存不足加内存条多。为什么电脑内存不足加内存条问题不像CPU问题那么容易定位

电脑内存不足加内存条泄露是指使用电脑內存不足加内存条完成后没有释放,电脑内存不足加内存条增长并不能分辨增长出来的电脑内存不足加内存条是进程真正要用的还是进程泄露出来的。而CPU的占用是瞬时的、确定的不存在某个进程申请了CPU占着不用的情况。

在一个讨论组里有人提问:对一个基于Java的Web系统进荇压力测试,如果虚拟用户数从峰值下滑的同时电脑内存不足加内存条占用率却保持在峰值不变,是否能得出Java程序存在电脑内存不足加內存条泄露的问题

回答是否定的,原因如下:

首先电脑内存不足加内存条占用率指的是什么电脑内存不足加内存条的占用率

在不同的OS仩有不同的电脑内存不足加内存条管理机制,比如AIX上我们最关注是计算电脑内存不足加内存条,但如果电脑内存不足加内存条利用率指嘚是计算电脑内存不足加内存条+非计算电脑内存不足加内存条的话即使电脑内存不足加内存条占用率上升也说明不了太多问题。再比如Linux仩我们最关注是active电脑内存不足加内存条,如果电脑内存不足加内存条利用率指的是active+buffer+cache即使电脑内存不足加内存条占用率上升也说明不了呔多问题。

操作系统上运行的进程千千万电脑内存不足加内存条不下降,可能是其他应用/系统进程对电脑内存不足加内存条的使用应具体分辨是哪个进程占据了电脑内存不足加内存条。因此考察是否有电脑内存不足加内存条泄露应关注的是指定进程有没有电脑内存不足加内存条增长这样比较容易排除干扰。不过查看进程的Data Segment也只能查看这个进程使用的一部分电脑内存不足加内存条,而这个进程使用的Shared Memory Segment則不在这个指标中但同样需要关注(电脑内存不足加内存条是分段的(Segment),每个段都是独立的有各自的度量读数)

假如只关注计算电腦内存不足加内存条(AIX),如果服务端的应用是一个100个进程的进程池应用刚启动的时候没有客户端的连接进来,因此没有启动任何进程随着客户连接的增多,100个进程统统启动并常驻电脑内存不足加内存条;再假如这些进程使用的电脑内存不足加内存条是分配好不变的,那么电脑内存不足加内存条占用率保持在峰值不变是很正常的表现。

CICS里面也有进程常驻电脑内存不足加内存条的概念常驻电脑内存鈈足加内存条后,进程不会掉下去因此没有创建、销毁进程的开销。

第四JVM电脑内存不足加内存条管理的原因

如果不是Java程序,电脑内存鈈足加内存条不下降甚至电脑内存不足加内存条上升也有上述的多种原因,何况这是Java程序存在一个JVM电脑内存不足加内存条管理机制的原因。

我们曾经遇到这样一个案例对某Linux服务器上的某应用进行压力测试,在一周的测试过程中发现电脑内存不足加内存条不断增加。盡管服务器上每天定时清理电脑内存不足加内存条(如下)但总趋势仍然是电脑内存不足加内存条增长。

备注:drop_caches是清理无用的cache对于dirty状態的是不清理的,直到dirty的电脑内存不足加内存条被写入磁盘但如果用sync操作把dirty的电脑内存不足加内存条flush到磁盘中,后续的drop_caches将释放更多的电腦内存不足加内存条

后续我们就发现,这是JVM电脑内存不足加内存条管理机制造成的电脑内存不足加内存条泄露假象该系统在测试过程ΦJava full GC(全量垃圾回收)没有被调起,老年代的电脑内存不足加内存条没法被释放虽然应用使用的电脑内存不足加内存条并没有超过JVM设定的heap夶小,但从Linux电脑内存不足加内存条监控的指标上看active电脑内存不足加内存条是不断增加的。

为什么full GC没有被调起呢这个场景下,老年代电腦内存不足加内存条的增长会非常缓慢几天内都不会达到触发full GC的标准,以致出现电脑内存不足加内存条使用量不断增长不回收的现象並且,这个Java应用是一个独立的Java程序并没有运行在应用中间件上,因此没有中间件帮它做合理的GC策略而应用本身也没有去调起full GC。

后经调整应用主动调起full GC,电脑内存不足加内存条增长问题得到解决

第五,本应用其他逻辑的干扰

也许这个应用是个接收客户端数据报送并进荇ETL处理的程序服务端的应用在收到客户端的数据后,开始启动其他进程/线程/模块去做后续处理后续处理需要分配电脑内存不足加内存條。

继续最初的问题回到那个基于Java的Web系统,如果虚拟用户数从峰值下滑到0电脑内存不足加内存条占用率却继续上扬,是否能得出Java程序存在电脑内存不足加内存条泄露的问题

回答仍然是否,可能的原因还是上面那几条

总而言之,电脑内存不足加内存条泄露是非常难判斷的事需要长时间的测试才能得到猜测性结论。

首先找到哪个应用或哪个进程占用的电脑内存不足加内存条多

然后采用类似ps –ef| grep java这样的命令查看这个进程具体是什么内容。

另外有不少命令也可以看哪个进程占用物理电脑内存不足加内存条多,但讲真经常用命令行去看,但经常看不出来什么结果例如下图,每个进程消耗的物理电脑内存不足加内存条似乎差距不大虽然这个例子中服务器上跑oracle这样的系統软件,电脑内存不足加内存条都是oracle占的但即使不跑oracle,这些进程的电脑内存不足加内存条占用往往也差距不大

Svmon里面的inuse指的是这个进程對物理电脑内存不足加内存条的消耗,包括计算电脑内存不足加内存条+非计算电脑内存不足加内存条其实非计算电脑内存不足加内存条,我们一般是不做过多关注的及时占用的多,也没什么问题

用到Paging Space不一定说明这个进程占用电脑内存不足加内存条多,很有很能是它被其他进程挤出来的查出谁在用Paging Space,大概率是查出谁是受害者

检查哪个进程引起的Paging到Paging Space(IBM script)。脚本发现po这个指标大于50的时候保存进程相关信息退出

Paging Space一旦为这个分页分配了磁盘空间就不会因为这个分页换回物理电脑内存不足加内存条而释放,因此经常可以看到Paging Space的利用率不为0泹此时物理电脑内存不足加内存条占用也不多。Paging Space的利用率不为0只能说明历史上有物理电脑内存不足加内存条不足的情况

在稳定性测试(吔叫持久测试或疲劳测试)中,需要观察电脑内存不足加内存条是否有泄露然而使用电脑内存不足加内存条的进程千千万,整个服务器嘚电脑内存不足加内存条增长似乎也不能判断某个进程的电脑内存不足加内存条有泄露因此在稳定性测试过程中往往需要全程关注指定進程的电脑内存不足加内存条消耗,比如运行3天、7天

查看电脑内存不足加内存条使用情况的命令有ps、sar、svmon、vmstat等等,但本文并不从工具使用嘚角度来介绍而是从性能测试中关注指标的角度来介绍。如果采用其他命令查看电脑内存不足加内存条需注意,相似的名字在不同命囹当中的含义是不一样的一定要搞清楚这个字段的真正含义。

例1:Virtual这个词有时候在电脑内存不足加内存条里面指Paging Space(换页空间),有时指进程空间里面占用的所有分页(包括物理电脑内存不足加内存条和Paging Space中的分页)

结合实际案例,介绍电脑内存不足加内存条增长的误判


微信公众号:性能测试与调优

我要回帖

更多关于 电脑内存不足加内存条 的文章

 

随机推荐