精华内容
下载资源
问答
  • 以php-fpm为例 列出所有进程内存使用量 ps -ylC php-fpm --sort:rss 计算平均内存用量 ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

    以php-fpm为例

    列出所有进程内存使用量

     ps -ylC php-fpm --sort:rss

    计算平均内存用量

    ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

     

    展开全文
  • Apple的WebKit浏览器引擎JavaScript引擎JavaScriptCore已升级为新的字节码格式,从而... WebKit团队声称,新格式平均使用内存减少了50%,这意味着Facebook或Reddit等JavaScript繁多的网站的内存使用量总体减少了1...

    Apple的WebKit浏览器引擎JavaScript引擎JavaScriptCore已升级为新的字节码格式,从而提高了内存效率和类型安全性。

    这种格式的目标在6月21日的公告中进行了详细介绍 ,目的是减少内存消耗并允许字节码缓存在磁盘上。 WebKit团队声称,新格式平均使用的内存减少了50%,这意味着Facebook或Reddit等JavaScript繁多的网站的内存使用量总体减少了10%。

    [更深入: 如何开始使用WebAssembly WebAssembly的下一步是什么 8个使WebAssembly崭露头角的项目 •那么, WebAssembly的下一步究竟是什么? | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

    新格式引用了两项重大更改:

    • 不再有用于执行的单独的链接编码。 这意味着字节码不再是直接线程化的,因为指令的地址无法存储到磁盘,因为它随每次程序调用而改变。
    • 为了使单一格式既适合存储又适合执行,可以将指令编码为窄或宽。 使用窄指令,操作码和操作数各自占用一个字节。 一条宽指令由一个特殊的单字节操作码op_wide ,后跟一系列用于原始操作码及其参数的四个字节的插槽。

    新的字节码还具有元数据表。 链接时,将使用与给定指令关联的所有可写数据初始化边表。 此外,通过改进与字节码相关的基础结构,提高了类型安全性。 WebKit存储库中正在开发用于新字节码的缓存API。 开发人员可以在bugs.webkit.org上做出贡献。

    参与该项目的开发人员试图解决旧字节码格式的两个主要问题。 首先,它使用了太多的内存,其次,它包含了可写的指令流,从而阻止了内存映射字节码流。 旧的字节码格式还具有不再有用的优化,例如直接线程化

    新的字节码格式在iOS 12.1和MacOS 10.14.4随附的Safari 12.1浏览器以及Safari技术预览版中可用。 您可以从webkit.org 下载Safari技术预览

    From: https://www.infoworld.com/article/3405156/webkit-upgrade-improves-memory-usage.html

    展开全文
  • 环境介绍: ...注:使用模板监控的时候1、监控项只能获取到CPU的1分钟5分钟15分钟的平均值,不能查看到实时的CPU峰值。2、监控内存只能查看内存的剩余,无法查看实时峰值。 操作介绍: cpu 监控key 值:...

    环境介绍:

    zabbix 3.2
    模板: Template OS windows
    监控主机: windows server 2008 r2
    主机已经安装:zabbix agentd 3.2.11代理

    注:使用模板监控的时候
    1、监控项只能获取到CPU的1分钟5分钟15分钟的平均值,不能查看到实时的CPU峰值。
    2、监控内存只能查看内存的剩余量,无法查看实时峰值。

    操作介绍:

    cpu 监控
    key 值:perf_counter[\Processor(_Total)\% Processor Time]
    zabbix 3.2 监控Windows 实时内存使用率与CPU使用率

    内存监控
    key 值:vm.memory.size[pused]
    zabbix 3.2 监控Windows 实时内存使用率与CPU使用率

    通过以上2个key值即可监控到实时CPU/内存的峰值

    转载于:https://blog.51cto.com/7603402/2164026

    展开全文
  • 内存分析文章涉及JVM的垃圾回收,主要讲的是通过使用「堆外内存」对Young GC进行优化。文章中介绍,MsgBroker消息中间件会对...随着新特性的开发和消息的增长,我们发现 MsgBroker 的 YGC 平均耗时已缓慢增长至 ...

    17e72bb01bf1

    内存分析

    文章涉及JVM的垃圾回收,主要讲的是通过使用「堆外内存」对Young GC进行优化。

    文章中介绍,MsgBroker消息中间件会对消息进行缓存,JVM需要为被缓存的消息分配内存,首先会被分配到年轻代。

    当缓存中的消息由于各种原因,一直投递不成功,这些消息会进入老年代。

    最终呈现的问题是YGC时间太长。

    随着新特性的开发和消息量的增长,我们发现 MsgBroker 的 YGC 平均耗时已缓慢增长至 50ms~60ms,甚至部分机房的 YGC 平均耗时已高达 120ms。

    有一个疑问,消息进入老年代,出现堆积,为何会导致YGC时间过长呢?

    按着文章中的叙述,回答这个问题。

    在YGC阶段,涉及到垃圾标记的过程,从GCRoot开始标记。

    因为YGC不涉及到老年代的回收,一旦从GCRoot扫描到引用了老年代对象时,就中断本次扫描。这样做可以减少扫描范围,加速YGC。

    存在被老年代对象引用的年轻代对象,它们没有被GCRoot直接或者间接引用。

    YGC阶段中的old-gen scanning即用于扫描被老年代引用的年轻代对象。

    old-gen scanning扫描时间与老年代内存占用大小成正比。

    得到结论,老年代内存占用增大会导致YGC时间变长。

    总的来说,将消息缓存在JVM内存会对垃圾回收造成一定影响:

    消息最初缓存到年轻代,会增加YGC的频率。

    消息被提升到老年代,会增加FGC的频率。

    老年代的消息增长后,会延长old-gen scanning时间,从而增加YGC耗时。

    文章使用「堆外内存」减少了消息对JVM内存的占用,并使用基于Netty的网络层框架,达到了理想的YGC时间。

    注:Netty中也使用了堆外内存。

    通过引入自适应投递限流,在实验室测试环境下,MsgBroker 在异常场景下的 YGC 耗时进一步从 83ms 降低到 40ms,恢复了正常的水平。

    一:堆外内存是什么?

    在JAVA中,JVM内存指的是堆内存。

    机器内存中,不属于堆内存的部分即为堆外内存。

    堆外内存也被称为直接内存。

    17e72bb01bf1

    堆内存和堆外内存

    堆外内存并不神秘,在C语言中,分配的就是机器内存,和本文中的堆外内存是相似的概念。

    在JAVA中,可以通过Unsafe和NIO包下的ByteBuffer来操作堆外内存。

    Unsafe类操作堆外内存

    sun.misc.Unsafe提供了一组方法来进行堆外内存的分配,重新分配,以及释放。

    public native long allocateMemory(long size); —— 分配一块内存空间。

    public native long reallocateMemory(long address, long size); —— 重新分配一块内存,把数据从address指向的缓存中拷贝到新的内存块。

    public native void freeMemory(long address); —— 释放内存。

    一顿操作猛如虎,直接psvm走起。

    public static void main(String[] args) {

    Unsafe unsafe = new Unsafe();

    unsafe.allocateMemory(1024);

    }

    然而Unsafe类的构造器是私有的,报错。

    而且,allocateMemory方法也不是静态的,不能通过Unsafe.allocateMemory调用。

    幸运的是可以通过Unsafe.getUnsafe()取得Unsafe的实例。

    public class UnsafeTest {

    public static void main(String[] args) {

    Unsafe unsafe = Unsafe.getUnsafe();

    unsafe.allocateMemory(1024);

    unsafe.reallocateMemory(1024, 1024);

    unsafe.freeMemory(1024);

    }

    }

    此外,也可以通过反射获取unsafe对象实例

    NIO类操作堆外内存

    用NIO包下的ByteBuffer分配直接内存则相对简单。

    public class TestDirectByteBuffer {

    public static void main(String[] args) throws Exception {

    ByteBuffer buffer = ByteBuffer.allocateDirect(10 * 1024 * 1024);

    }

    }

    然而运行时报错了。

    java(51146,0x7000023ed000) malloc: *** error for object 0x400: pointer being realloc'd was not allocated

    *** set a breakpoint in malloc_error_break to debug

    17e72bb01bf1

    错误信息

    然而在小伙伴的电脑上跑这段的代码是可以成功运行的。

    二:堆外内存垃圾回收

    对于内存,除了关注怎么分配,还需要关注如何释放。

    从JAVA出发,习惯性思维是堆外内存是否有垃圾回收机制。

    考虑堆外内存的垃圾回收机制,需要了解以下两个问题:

    堆外内存会溢出么?

    什么时候会触发堆外内存回收?

    问题一

    通过修改JVM参数:-XX:MaxDirectMemorySize=40M,将最大堆外内存设置为40M。

    既然堆外内存有限,则必然会发生内存溢出。

    为模拟内存溢出,可以设置JVM参数:-XX:+DisableExplicitGC,禁止代码中显式调用System.gc()。

    可以看到出现OOM。

    得到的结论是,堆外内存会溢出,并且其垃圾回收依赖于代码显式调用System.gc()。

    问题二

    关于堆外内存垃圾回收的时机,首先考虑堆外内存的分配过程。

    JVM在堆内只保存堆外内存的引用,用DirectByteBuffer对象来表示。

    每个DirectByteBuffer对象在初始化时,都会创建一个对应的Cleaner对象。

    这个Cleaner对象会在合适的时候执行unsafe.freeMemory(address),从而回收这块堆外内存。

    当DirectByteBuffer对象在某次YGC中被回收,只有Cleaner对象知道堆外内存的地址。

    当下一次FGC执行时,Cleaner对象会将自身Cleaner链表上删除,并触发clean方法清理堆外内存。

    此时,堆外内存将被回收,Cleaner对象也将在下次YGC时被回收。

    如果JVM一直没有执行FGC的话,无法触发Cleaner对象执行clean方法,从而堆外内存也一直得不到释放。

    其实,在ByteBuffer.allocateDirect方式中,会主动调用System.gc()强制执行FGC。

    JVM觉得有需要时,就会真正执行GC操作。

    17e72bb01bf1

    显式调用

    三:为什么用堆外内存?

    堆外内存的使用场景非常巧妙。

    第三方堆外缓存管理包ohc(off-heap-cache)给出了详细的解释。

    摘了其中一段。

    When using a very huge number of objects in a very large heap, Virtual machines will suffer from increased GC pressure since it basically has to inspect each and every object whether it can be collected and has to access all memory pages. A cache shall keep a hot set of objects accessible for fast access (e.g. omit disk or network roundtrips). The only solution is to use native memory - and there you will end up with the choice either to use some native code (C/C++) via JNI or use direct memory access.

    大概的意思如下:

    考虑使用缓存时,本地缓存是最快速的,但会给虚拟机带来GC压力。

    使用硬盘或者分布式缓存的响应时间会比较长,这时候「堆外缓存」会是一个比较好的选择。

    四:如何用堆外内存?

    在第一章中介绍了两种分配堆外内存的方法,Unsafe和NIO。

    对于两种方法只是停留在分配和回收的阶段,距离真正使用的目标还很遥远。

    在第三章中提到堆外内存的使用场景之一是缓存。

    那是否有一个包,支持分配堆外内存,又支持KV操作,还无需关心GC。

    答案当然是有的。

    有一个很知名的包,Ehcache。

    Ehcache被广泛用于Spring,Hibernate缓存,并且支持堆内缓存,堆外缓存,磁盘缓存,分布式缓存。

    此外,Ehcache还支持多种缓存策略。

    其仓库坐标如下:

    org.ehcache

    ehcache

    3.4.0

    接下来就是写代码进行验证:

    public class HelloHeapServiceImpl implements HelloHeapService {

    private static Map inHeapCache = Maps.newHashMap();

    private static Cache offHeapCache;

    static {

    ResourcePools resourcePools = ResourcePoolsBuilder.newResourcePoolsBuilder()

    .offheap(1, MemoryUnit.MB)

    .build();

    CacheConfiguration configuration = CacheConfigurationBuilder

    .newCacheConfigurationBuilder(String.class, OffHeapClass.class, resourcePools)

    .build();

    offHeapCache = CacheManagerBuilder.newCacheManagerBuilder()

    .withCache("cacher", configuration)

    .build(true)

    .getCache("cacher", String.class, OffHeapClass.class);

    for (int i = 1; i < 10001; i++) {

    inHeapCache.put("InHeapKey" + i, new InHeapClass("InHeapKey" + i, "InHeapValue" + i));

    offHeapCache.put("OffHeapKey" + i, new OffHeapClass("OffHeapKey" + i, "OffHeapValue" + i));

    }

    }

    @Data

    @AllArgsConstructor

    private static class InHeapClass implements Serializable {

    private String key;

    private String value;

    }

    @Data

    @AllArgsConstructor

    private static class OffHeapClass implements Serializable {

    private String key;

    private String value;

    }

    @Override

    public void helloHeap() {

    System.out.println(JSON.toJSONString(inHeapCache.get("InHeapKey1")));

    System.out.println(JSON.toJSONString(offHeapCache.get("OffHeapKey1")));

    Iterator iterator = offHeapCache.iterator();

    int sum = 0;

    while (iterator.hasNext()) {

    System.out.println(JSON.toJSONString(iterator.next()));

    sum++;

    }

    System.out.println(sum);

    }

    }

    其中.offheap(1, MemoryUnit.MB)表示分配的是堆外缓存。

    Demo很简单,主要做了以下几步操作:

    新建了一个Map,作为堆内缓存。

    用Ehcache新建了一个堆外缓存,缓存大小为1MB。

    在两种缓存中,都放入10000个对象。

    helloHeap方法做get测试,并统计堆外内存数量,验证先插入的对象是否被淘汰。

    使用Java VisualVM工具Dump一个内存镜像。

    Java VisualVM是JDK自带的工具。

    工具位置如下:

    /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/bin/jvisualvm

    也可以使用JProfiler工具。

    打开镜像,堆里有10000个InHeapClass,却没有OffHeapClass,表示堆外缓存中的对象的确没有占用JVM内存。

    17e72bb01bf1

    内存镜像

    接着测试helloHeap方法。

    输出:

    {"key":"InHeapKey1","value":"InHeapValue1"}

    null

    ……(此处有大量输出)

    5887

    输出表示堆外内存启用了淘汰机制,插入10000个对象,最后只剩下5887个对象。

    如果堆外缓存总量不超过最大限制,则可以顺利get到缓存内容。

    总体而言,使用堆外内存可以减少GC的压力,从而减少GC对业务的影响。

    参考

    展开全文
  • 使用top,我可以看到很多postgres连接使用高达300mb(平均〜200mb)的非共享(RES – SHR)内存: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3534 postgres 20 0 2330m 1.4g 1.1g S 0.0
  • 1 背景最近工作中碰到一个生产问题,就是应用服务在使用 OkHttpClient 时,在创建大量对外连接时线程堆积导致内存溢出。主要表现是在流量极低的情况下,即平均 qps 在 1~4 左右的情况下,各主要线程都很低,但是...
  • 1 背景最近工作中碰到一个生产问题,就是应用服务在使用 OkHttpClient 时,在创建大量对外连接时线程堆积导致内存溢出。主要表现是在流量极低的情况下,即平均 qps 在 1~4 左右的情况下,各主要线程都很低,但是...
  • 文章涉及JVM的垃圾回收,主要讲的是通过使用「堆外内存」对Young GC进行优化。 文章中介绍,MsgBroker消息中间件会对消息进行缓存,JVM...随着新特性的开发和消息的增长,我们发现 MsgBroker 的 YGC 平均耗时已缓...
  • 最近工作中碰到一个生产问题,就是应用服务在使用 OkHttpClient 时,在创建大量对外连接时线程堆积导致内存溢出。 主要表现是在流量极低的情况下,即平均 qps 在 1~4 左右的情况下,各主要线程都很低,但是系统活跃...
  • 我使用top来查看它的使用量.它的输出粘贴在帖子的末尾.这是两个问题:(1)我看到每个正在运行的进程占用很小的内存百分比(%MEM不超过0.2%,大多数只有0.0%),但总内存几乎与第四行输出一样( “Mem:130766620k总计,...
  • 其他的,每个孩子的php-fpm内存平均内存似乎都没有遵循相同的模式.只有重启php-fpm才会产生效果,即便如此,我也不能说我发现性能有任何变化.系统很好,响应时间很好,一切都很好,只是好奇这是否是预...
  • 需要的python模块(xlwt) import xlwt 完成Workbook类的初始化 work = xlwt.Workbook(encoding...excel_data = [["主机IP", "CPU核数", "CPU平均使用量", "内存大小", "内存平均使用量", "磁盘大小", "磁盘平均使用量
  • 注册表关闭虚拟内存

    2018-09-06 17:48:22
    但系统运行时,并不会优先选择效率快的内存,而是两者交互使用,将暂存诗句平均、分散保存在两种媒介中。因此,即使添购大容量的内存,也不见得可以发挥预期的性能。 如果用户的计算机实际安装的内存空间达到2G以上...
  • 关闭虚拟内存

    2020-04-27 11:10:42
    但系统运行时,并不会优先选择效率快的内存,而是两者交互使用,将暂存诗句平均、分散保存在两种媒介中。因此,即使添购大容量的内存,也不见得可以发挥预期的性能。如果用户的计算机实际安装的内存空间达到8G以上,...
  • 这两个,大家应该很清楚就是变量和常量变量:在程序运行过程中,值会发生变化的常量:在程序运行过程中,值不会发生变化的无论是变量还是常量,在创建时都会在内存中开辟一块空间,用于保存它的值。...
  • 时间复杂度的系数、常数 、低阶:大数据习惯性忽略系数/常数,实际情况中排序数据可能小,这时候系数和常数也不能忽略3. 比较次数和交换(或移动)次数:排序过程中一定会发生的比较和交换操作,需要考虑性能...
  • Win32 内存资源

    2019-03-22 09:46:29
    Win32资源管理器中 物理内存含义 对每个进程的虚拟/物理内存使用描述: 1.硬错误/秒:在最后一分钟内每秒出现的平均硬页错误数 ...可共享(KB):进程所使用的可与其他进程共享的物理内存量 4.专用(KB):由该进...
  • 我最近接手了一个文件托管站点(类似于rapidshare,megaupload等),目前平均每天约有75,000名访问者。...我们上传了多个300MB +文件,在上传之前,我们拥有大约3.7G的内存,上传3个300M的文件后,内存使用量达到了...
  • 性能计数器之内存

    2013-07-29 11:57:45
    含义:表示在计算机中可供进程使用的物理内存数量,注意这个计数器是最近计算的结果而并非平均值。Memory/Page Reads/sec阀值:持续大于5表示在内存读取请求时有大量页面错误。含义:表示进程的Working Set相对于...
  • 系统负载平均值,活动进程,每处理器内核使用情况,全局内核使用情况和内存分配。 监视磁盘驱动器的温度和运行状况。 文件系统的使用和文件系统的I / O活动。 网络流量最多可使用10个网络设备。 系统服务包括SSH...
  • 2019年10月11日14:03:31 节省内存 PhpSpreadsheet在工作表中平均每个单元格使用约1k,因此大型工作簿可以迅速用尽...这使您可以减少大型工作簿的内存使用量,尽管以访问单元数据的速度为代价。 默认情况下,PhpSpr...
  • 提出了结合页分配和组调度的内存功耗优化方法(CAS).CAS周期性地激活当前需要的内存rank,从而可以将暂时不使用内存rank置为低功耗状态,同时延长低功耗内存rank的空闲时间.仿真实验结果显示:与其他同类方法相比,CAS...
  • 平常我们在使用电脑的时候就会发生卡顿的情况,在此时我们可以右击任务栏检查CPU、内存条的使用情况。(一般笔记本CPU都是焊接在主板上的,是不好换的,所以我们想要提高速度就要从内存和磁盘上想办法) # 判断是否...
  • poi解析excel内存溢出

    千次阅读 2013-03-20 22:16:35
    真是悲剧啊,一个破内部使用系统20多个人使用的后台管理系统有个excel文件上传功能,使用poi3.6版本来解析excel,出现的case是20多个人同时在上传,平均每个人上传的excel有1000多行,大小也就是不到100k吧,由于每...
  • 提交(KB):操作系统为内存保留的虚拟内存量,任务管理器中显示为:提交大小3.工作集(KB):进程当前正在使用的物理内存量,任务管理器中显示为:工作设置(内存)3.可共享(KB):进程所使用的可与其他进程共享的...
  • 1. 概述  多任务和高并发是衡量一台...综合来说就是在使用的时候,每秒事务处理数这个指标最能说明问题,也就是说每秒内服务器平均能响应的请求数,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 466
精华内容 186
关键字:

内存平均使用量