内存

如何正确查看Linux机器内存使用情况

旧城冷巷雨未停 提交于 2020-05-08 07:43:38
如何正确查看Linux机器内存使用情况 ###背景   只要工作上涉及到Linux机器,基本上都会有这样一个需求,查看内存使用情况,但是怎么看才正确呢?之前使用的是top命令,后来各种baidugoogle,问了osc各路大神,才知道自己一直存在一个误区。 ###为什么top命令看内存会有误区?   top是个很好用的系统分析工具,可以实时查看进程,cpu使用率,内存使用率等情况,有点像windows下的任务管理器。我以前一直以为top看到的就是真正的内存使用情况,后来baidugoogle好久,才发现自己图样。= =|| 首先看下top命令后展示出来的内存使用情况,我用自己一台搬瓦工vps做示范: Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 73728k total, 70048k used, 3680k free, 0k buffers Swap: 16384k total, 4696k used, 11688k free, 64716k cached   可以看到 Mem: 73728k total, 70048k used, 3680k free, 0k buffers 这一行,就是内存使用情况。一开始我也只看这一行。后来在公司的生产机子上看时,觉得很疑惑

ltpstress.sh-场景设置

不打扰是莪最后的温柔 提交于 2020-05-02 12:04:54
我们常用用LTP的ltpstress.sh脚本测试Linux的稳定性,以下将探讨一下如何好的进行Linux压力测试。 一.如何对内核进行压力测试? 在进行压力测试之前,我们先思考一下压力测试要达到那些要求,才能说明Linux的稳定性。既然是压力测试,那么必然是超负荷测试,因此一般我们会对CPU、内存等使用率要求80%以上;另一个测试覆盖度。LTP已经为我们提供了测试用例,因此我们不用去考虑测试的覆盖度,那么我们关注的就是如何设置CPU和内存的压力。 二.ltpstress.sh默认测试场景 通常我们在进行Linux压力测试时,CPU和内存使用率要求90%以上,那么关键是如何设置ltpstress.sh才能满足这两个要求。如果我们在不修改ltpstress.sh直接进行压力测试时,CPU使用率一般会是90%左右,内存会是60%左右,但也不是绝对的。不过怎么说,这个可能不能满足我们的场景要求。我们首先分析一下ltpstress.sh如何设置cpu和内存压力的。ltpstress.sh是用genload进行压力设置,genload的具体用法可以ltp/testcase/bin/genload --help查看。 假设你的内存大小通过'free -m'看到为memSize=7834M,swapSize=2048,ltpstress.sh默认分配压力内存大小为stress_mem

tomcat 和 jdk 的配置 适当加大tomcat的内存

时间秒杀一切 提交于 2020-04-11 12:10:38
在安装Tomcat之前我们必须先配置好JDK: 最简单的JDK配置方式: 打开系統属性(点击我的电脑——属性),然后选择高级里面的环境变量。在新的打开介面里需要新建JAVA_HOME 然后配置jdk的路径如:C:\Program Files\Java\jdk1.6.0(我的jdk安装在C盘) 再到path的最前面加上:%JAVA_HOME%\bin.; 配置完成。 修改Tomcat端口号步骤: 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 4.在server.xml文件里面找到下列信息 <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" /> 5.把port="8080"改成port="8888",并且保存 6.启动Tomcat,并且在IE浏览器里面的地址栏输入http://127.0.0.1:8888/ Tomcat项目动态部署: 1.在Tomcat 6.0

[转]Java虚拟机支持的最大内存限制

五迷三道 提交于 2020-04-06 19:49:02
在命令行下用java -XmxXXXXM -version命令来进行测试,然后逐渐的增大XXXX的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息。 下面列出当前比较流行的几个不同公司不同版本JVM最大堆内存: 公司JVM版本 最大堆内存(兆)client 最大堆内存(兆)server Sun 1.5.x 1492 1520 Sun 1.5.5(Linux) 2634 2660 Sun 1.4.2 1564 1564 Sun 1.4.2(Linux) 2047 N/A BEA JRockit 1909 1902 Sun 1.6.0 1442 N/A 看样子用Java想用大内存也是不可能的了。而且一般的说法是内存太大了,垃圾收集的时间就会长。这也可以理解,一般是内存不够用了才收集的,扫描2G内存比1G当然要慢多了,而且内存对象多了,估计关系是指数上升的。在实际的应用中还是要自己试验一下看到底内存能达到什么样的值。 通过这个表想说明的是,如果你的机器的内存太多的话,只能通过多运行几个实例来提供机器的利用率了,例如跑Tomcat,你可以多装几个Tomcat并做集群,依此类推。 堆内存分配 JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小 于40%时,JVM就会增大堆直到-Xmx的最大限制

理解多态AND理解父类引用指向子类对象

末鹿安然 提交于 2020-02-29 07:45:15
假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存. 现在通过代码来看看内存的分配情况: Father f = new Father();//系统将分配1M内存. Son s = new Son();//系统将分配1.5M内存. 因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数. 由于s中包含了父类的实例,所以s可以调用父类的方法. Son s1 = s;//s1指向那1.5M的内存.(可以理解为就是:子类引用指向子类对象) Father f1 = (Father)s;//这时f1会指向那1.5M内存中的1M内存,即是说,f1只是指向了s中实例的父类实例对象,所以f1只能调用父类的方法(存储在1M内存中),而不能调用子类的方法(存储在0.5M内存中). Son s2 = (Son)f;//这句代码运行时会报ClassCastException.因为f中只有1M内存,而子类的引用都必须要有1.5M的内存,所以无法转换. Son s3 = (Son)f1;//这句可以通过运行,这时s3指向那1.5M的内存.由于f1是由s转换过来的,所以它是有1.5M的内存的,只是它指向的只有1M内存. 示例: class Father{ void print(){

Java性能优化——操作系统性能监控

巧了我就是萌 提交于 2020-01-07 17:49:35
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.CPU使用率 总述 CPU使用率可以分为 用户态CPU使用率 和 系统态CPU使用率 。 用户态CPU使用率 :应用程序代码所执行的时间占CPU总执行时间的百分比。 系统态CPU使用率 :应用程序调用操作系统代码所执行的时间占CPU总时间的百分比。如果较高,说明有共享资源的竞争或者大量IO交互操作。 减少系统态CPU使用率,将CPU更多的执行时间分配到应用程序本身,可以提高应用性能。 PS:要提升性能,除了CPU使用率,还要监控单位时间内执行的指令数、每条执行所需的周期等,防止等待状态也被当成了高效执行。 Windows监控CPU使用率 使用任务管理器进行监控。 左上角是CPU使用率总和,右上角是每个CPU的使用率,绿色代表每个CPU使用率,红色代表每个CPU的系统态使用率,前后两者的差代表用户态使用率。 2.CPU调度程序运行队列 总述 CPU调度程序运行队列就是那些已经准备好运行、正在等待可用CPU来执行他们的线程。 虚拟处理器个数 = Runtime.getRuntime().availableProcessors() 当队列长度达到虚拟处理器个数的3-4倍时,就需要注意或者进行优化了。 对于上述情况有两种解决措施: 增加CPU 对应用程序的算法进行优化来改进CPU使用率。如减少垃圾回收的频率

java性能监控常用的几个命令

假如想象 提交于 2020-01-07 17:48:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 找到性能问题的第一步是监控应用的行为,通过监控提供的线索,我们可以将性能问题进行归类并分析。 1、CPU使用率:大多数操作系统的CPU使用率分为用户态CPU使用率和系统态CPU使用率。用户态CPU使用率是指执行应用程序代码的时间占总CPU时间的百分比,相比而言,系统态CPU使用率是指应用执行操作系统调用的时间占总CPU时间的百分比。系统态CPU使用率高意味着共享资源有竞争或者I/O设备之间有大量的交互。理想情况下,应用达到最高性能和扩展时,它的系统态CPU使用率为0%,所以提高应用性能和扩展性的一个目标是尽可能降低系统态CPU使用率。 CPU停滞通常会浪费几百个时钟周期,因此提高计算密集型应用性能的策略是减少停滞或者改善CPU高速缓存使用率,从而减少CPU在等待内存数据时浪费的时钟周期。 Linux命令行监控CPU使用率的有vmstat或者top(或者htop,需要自行安装,但查看效果更好): vmstat 采集间隔(秒) 采集次数 当一直监控时,可以省去采集次数,即 vmstat 2,每隔2秒采集一次,一直持续。 命令介绍完毕,现在开始实战讲解每个参数的意思,后面还会使用到: r 表示运行队列的长度,值是运行队列中轻量级进程的实际数量,即当内核线程已经准备好运行只是还没有可用的处理器执行时,运行队列就会有值。

Java内存解析

痴心易碎 提交于 2019-12-23 00:08:35
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 栈、堆、常量池等虽同属 Java 内存分配时操作的区域,但其适用范围和功用却大不相同。本文将深入Java核心,简单讲解Java内存分配方面的知识。 首先我们先来讲解一下内存中的各个区域。 stack(栈) 存放基本类型的数据和对象的引用,即存放变量。 如果存放的是基本类型数据(非静态变量),则直接将变量名和值存入stack中的内存中; 如果是引用类型,则将变量名存入栈,然后指向它new出的对象(存放在堆中)。 heap(堆) 存放new产生的数据。 data segment 分为静态域和常量域。 静态域 存放在对象中用static定义的静态成员(即静态变量,同理,如果该静态变量是基本类型则将变量名和值存入静态域,如果是引用类型则指向new出的对象)。 常量池 常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如:类和接口的全限定名;字段的名称和描述符;方法和名称和描述符。 code segment:存放代码。 下面我来举几个简单的小例子来让大家认识一下这几个区域具体存放的内容: 注:例1和例2中大家要注意String类型不是基本数据类型

Redis的内存回收机制

情到浓时终转凉″ 提交于 2019-12-12 15:59:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Redis的内存回收机制主要体现在一下两个方面: 删除过期时间的键对象 删除过期键对象 :多行删除用于当客户端读取带有超市属性的键时,如果已经超过键设置的过期时间,会执行删除操作并返回空。 2.定时任务删除 :Redis内部维护一个定时任务,默认每秒运行10次。定时任务中删除过期键逻辑采用了自适应算法,根据键的过期比例,使用快慢两种速率回收键,流程如下: 流程说明: 定时任务在每个数据库空间随机检查20个键,当发现过期时删除对应的键 如果超过检查书的25%的键过期,循环执行回收逻辑知道不足25%或运行超时为止,慢模式下超时时间为25毫秒 如果之前回收键逻辑超时,则在Redis触发内部事件之前再次以快模式运行回收过期键任务,快模式下超时时间为1毫秒且2秒内只能运行1次 快慢两种模式内部删除逻辑相同,只是执行的超时时间不同。 内存使用到达maxmemory上限时触发内存溢出控制策略​​​​​​ 当Redis所用内存打到maxmemory上限时会触发响应的溢出控制策略,具体策略受maxmemory-policy参数控制,Redis支持6中策略,如下所示: noeviction:默认策略,不会删除任何数据,拒绝所有写入操作并返回客户端错误信息,此时Redis只响应读操作。 volatitle-rlu

android 占用过多内存的原因!

痴心易碎 提交于 2019-12-09 19:11:29
安卓的进程管理机制是事件触发式,比如开机时、开机后、网络连接更改、电量不足、电量充足、时间更改、插上电源等等这些状态的改变都可看作一个事件,安卓系统允许程序关联这些事件(这个在程序开发中设定的),比如关联开机后,差不多就相当于我们一般说的开机启动了。但是安卓系统可以允许一个程序关联多个事件,拿谷歌地图来说吧,它关联的事件有“开机后、电量不足、电量充足、安装应用程序、卸载应用程序、更新应用程序、插上电源”等等。。。中间任何一个状态改变,系统都会自动运行谷歌地图进入后台,你说任务管理器得多少次才能完全结束呢? 安卓为什么要这样做呢?其实这样做的目的是为了提高程序运行的效率。举例来说,当你打开WIFI时,肯定要上网,系统就会调入一些上网的关联程序进入后台休眠(只占用内存,不占用CPU资源),当你真正需要运行这些程序的时候,系统直接把程序从后台转到前台运行,这样大大提高了程序的运行效率,我觉得这也是统筹方法的一种应用吧。至于说会不会软件一直启动会把内存占满,这个不用担心,当系统内存低于某个值时,内存管理机制会根据进程的优先级来关闭后台进程。 来源: oschina 链接: https://my.oschina.net/u/114929/blog/145322