首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么java程序占用那么多内存

做java开发以来,有一个问题一直萦绕在脑海,那就是java程序为什么会占用那么多的虚拟内存。之前也没有深究,因为服务器内存够大。...但是最近用上了docker容器,每个容器基本上就几个GB的内存内存占用过大的问题必须得解决了。...检测命令是top,其中VIRT程序申请的内存有32GB,RES程序实际使用的内存有4.6GB,实际上我配置的最大内存和最小内存只有16GB。...我将这些分配内存的块大小都加起来,最终大小是32GB,说明除了我申请的16GB内存,程序又额外申请了16GB内存。...回顾 探究这个问题,原因是在使用docker容器的时候,一容器设置的内存较小,容易引起内存报警,二是容器的隔离程度不够,程序获得的cpu核数还是母鸡cpu的核数,这就更加剧了内存使用的膨胀。

3.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    poolmon定位内存泄漏

    在更多内存泄露场景中,poolmon并不大能定位到根因。...先介绍如何安装poolmon,然后介绍怎么 打开https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk 1...linkid=2166289 运行wdksetup.exe下载安装文件到一个目录 下载完成后关闭界面 然后去下载完成的目录(留存安装文件是为了在多台机器部署,压缩后复制到其他机器就可以,而不用再下载一次...1.txt -u -p -p(按2次p,paged) poolmon.exe -n c:\2.txt -u -p(按1次p,nonpaged) poolmon -n c:\3.txt -u (混合) notepad...对应到上图即 findstr /m /l /s MmSt *.sys findstr /m /l /s Se *.sys findstr /m /l /s FMfn *.sys 根据查到的关键词可以判定占用内存最多的是什么软件

    12.6K32

    数据库运行一段时间mysqld占用内存越来越高达到90%

    ),而现在mysqld占用的内存达到56G [root@bss-mysql-master home]# ....,加起来才25.85 GiB 猜测怀疑是不是有内存泄漏的问题,去官方也没有找到此版本内存泄漏的相关问题 一时间感觉到十分困扰 通过网络搜索参见这篇文章:mysqld进程占用内存过高怎么排查?...简言之,就是调用glibc申请的内存使用完毕后,归还给OS时没有被正常回收,而变成了碎片,随着碎片的不断增长,就能看到mysqld进程占用的内存不断上升。这时,可以调用函数主动回收释放这些碎片。...为了验证这一步,现在测试环境上实验: 使用sysbench 对数据库进行压测,压测一段时间mysqld内存使用上去了,停止压测,内存使用没有降低,也就是说线程关闭内存没有释放,使用gdb --batch...--pid `pidof mysqld` --ex 'call malloc_trim(0)'发现内存有明显的释放 于是确定在晚上业务低峰的时候在生产环境执行一下: [root@bss-mysql-master

    18.3K62

    C来实现内存

    介绍:        设计内存池的目标是为了保证服务器长时间高效的运行,通过对申请空间小而申请频繁的对象进行有效管理,减少内存碎片的产生,合理分配管理用户内存,从而减少系统中出现有效空间足够,而无法分配大块连续内存的情况...目标:     此次设计内存池的基本目标,需要满足线程安全性(多线程),适量的内存泄露越界检查,运行效率不太低于malloc/free方式,实现对4-128字节范围内的内存空间申请的内存池管理(非单一固定大小对象管理的内存池...比如用户申请12字节时,而真实情况是内存池向内存 申请了12+ sizeof(Obj)=12+12=24字节的内存空间,这样浪费大量内存用在标记内存空间上去,并且也没有体现索引表的优势。...所以现在这里限制了用户内存申请空间不得大于255字节,不过现在已经满 足项目要求。当然也可以修改为short类型记录申请空间的大小。    ...小结:内存池基本上满足初期设计目标,但是她并不是完美的,有缺陷,比如,不能申请大于256字节的内存空间,无内存越界检查,无内存自动回缩功能等。只是这些对我们的影响还不是那么重要。

    3K70

    Elasticsearch集群占用内存大?这招!

    一、freeze index冻结索引介绍 Elasticsearch为了能够实现高效快速搜索,在内存中维护了一些数据结构,当索引的数量越来越多,那么这些数据结构所占用的内存也会越来越大,这是一个不可忽视的损耗...在实际的业务开展过程中,我们会发现,有些索引的数据是“热”数据,经常被查询,这些索引对应的数据结构维护在内存中以提供快速查询是非常正确的,而有些“温”数据(例如随时时间推移的历史数据),可能很久才需要被查询到...,这时候一直维持在内存中就有些得不偿失了。...一个被冻结的索引的每个shard在被搜索时,Elasticsearch会创建一个临时的数据结构,一旦搜索完成将会立刻丢掉这个数据结构,由于不长期维持这些临时数据结构在内存,冻结索引比正常索引消耗更少的堆内存...总结来说索引的冻结是Elasticsearch提供的一个用于减少内存开销的操作,这个功能在7.14版本中被标记为Deprecated,在Version 8以后,已经对堆内存的使用进行了改进,冻结和解冻的功能不再适用

    1.7K20

    《叶问》33期,MGR最佳配置参考,PFS里的监测指标要全开吗,mysqld进程占用内存过高怎么排查

    group_replication_exit_state_action=READ_ONLY group_replication_member_expel_timeout=5 #如果网络环境不好,可以适当调高 另外,使用MGR的其他建议有: 只是InnoDB...问题3,mysqld进程占用内存过高怎么排查 遇到一个比较极端的案例,innodb_buffer_pool_size 值仅设置为2GB,但是mysqld进程却占用了25GB的内存。...4、程序内存泄漏风险。...可以valgrind工具检验是否存在这个问题,如果确定的话,可以考虑升级MySQL版本,或者定期在维护时间重启mysqld实例,或者通过高可用切换方式将有风险的实例重启。...5、glibc的内存管理器自身缺陷导致。 简言之,就是调用glibc申请的内存使用完毕后,归还给OS时没有被正常回收,而变成了碎片,随着碎片的不断增长,就能看到mysqld进程占用的内存不断上升。

    1.2K41

    关于gunicorn启动Django内存占用的疑问

    然后发现自己的所有python进程总是会被莫名的关掉,为此我还专门写了一个shell来监控django的进程 shell来监控web服务 。...同那篇文章中的猜测一样,是占用内存过多被停掉了,我购买的是最低配的200M内存。一个blog和一个osqa程序占了200多M内存,之前还真没注意过。...内存占用方面两个Django的进程正常访问状态各30M左右,一个管理进程(gunicorn启动时会有三个Django的进程)10M左右,nginx也就1、2M,memcached要20M左右。...不过在知道别人gunicorn启动Django程序只用了6M内存,我就无法淡定了。这是在和我同主机的另外一个用户的进程情况。...基于Django1.5新创建一个项目,然后直接gunicorn运行至少也得占用15M内存。 这到底是怎么做到的?

    2.8K20

    dotnet gcdump 调试应用程序内存占用

    在遇到需要在服务器端或客户端调试应用程序的内存占用时,可以尝试使用 dotnet 的 gcdump 工具进行调试,这个工具使用十分简单,功能也很强大 在运行这个工具之前要求设备上先安装 dotnet 环境...或者不想使用 VisualStudio 抓内存,只是想拿到当前内存信息,有空了再分析。或者是自动化测试的时候,通过调用命令行获取进程的内存,然后自动化分析内存。...此时通过 gcdump 都能很好的满足 使用 gcdump 能通过一句命令行调用获取指定 pid 进程的内存快照,将内存快照保存到文件,方便进行分析 在使用 gcdump 之前需要将 gcdump 作为全局工具安装...,请在命令行输入下面代码 dotnet tool install --global dotnet-gcdump 安装完成之后通过下面命令拿到指定进程 ID 的应用的内存 dotnet gcdump collect...这是测试程序的分析,通过这个工具可以非常方便拿到某个进程的内存 更多关于 gcdump 命令: -p 指定应用程序进程 -o 指定 gcdump 文件输出路径,默认为.

    1.2K30

    物理内存充足,但是为什么代码总申请不到内存呢?

    统计的是可以拿来给程序内存,而客户设置了 vm.min_free_kbytes(2.5G),这个内存在 free 统计,但是不在 memavailable 统计,nr_hugepage 也会有这个问题...内核将检查是否有足够的可用内存供应用进程使用; 如果有足够的可用内存内存申请允许;否则,内存申请失败,并把错误返回给应用进程。...overcommit_memory=2 当请求申请的内存 >= SWAP内存大小 + 物理内存 * N,则拒绝此次内存申请。... vm.overcommit_memory = 2 测试,分配内存失败; [root@test ~]# grep -i commit /proc/meminfo CommitLimit: 1940844...reserved memory. # An error report file with more information is saved as: # /root/hs_err_pid1267.log 如下配置

    2K40

    虚幻与Unity引擎 之 ✨ 为什么国内那么多开发者喜欢虚幻或者Unity?

    为什么国内那么多开发者喜欢虚幻或者Unity? 虚幻第一版1998年问世,Unity第一版2005年面世 简单介绍 首先,使用哪一款游戏引擎去制作一款游戏,并不是根据使用者的喜好来制定的。...选择它,程序员可以最直接的方式实现最优秀的解决方案。 但是,选择它就意味着要自己管理内存,要自己去管理第三方库的编译、链接、兼容问题,要自己去实现具体方案的每一个步骤。...但是,纵观我那么多年的经验,其实使用第三方库过程中,开源救命的也就那一次。 这意味着,开源和闭源在技术选型中的权重往往不高。因为大多数实践中,work around更具有性价比。...《刺客信条》的是自研引擎。 《黑魂》的是自研引擎。 《美国末日》,《神秘海域》的还是自研引擎。 《GTA》是自研引擎,《老头滚动条》还是自研引擎。 什么叫惊喜,这就叫惊喜。...但其实,不正是因为的人多,才会不停成为热点的吗? 为什么大家喜欢Unity呢? 第一,它选择了C#作为主要开发语言。

    3.9K41

    怎么JDK自带工具进行JVM内存分析

    内存泄漏排查:JVM 内存泄漏是指应用程序中的对象占用的内存无法被垃圾回收器释放,导致内存占用持续增长,最终耗尽可用内存。...通过内存分析工具,可以检测到哪些对象占用了大量内存且无法被释放,进而定位到可能存在内存泄漏的代码。内存优化:合理优化 JVM 内存配置可以提高应用程序的性能和稳定性。...通过分析应用程序的内存使用情况,可以调整堆内存大小、永久代(如果是旧版 Java)大小、新生代与老年代比例等参数,以减少垃圾回收频率,降低内存占用。...异常分析:当应用程序出现内存相关的异常,如 OutOfMemoryError(内存溢出错误)时,通过分析内存使用情况可以找到导致异常的根本原因,例如某个模块或对象占用了过多内存。...执行内存分析:一旦堆转储文件被导入到 MAT 中,就可以执行内存分析,按照前面提到的步骤来查找内存问题。

    17510

    process_vm_readv() 实现多进程内存队列

    一,问题背景 多进程之间需要传输大量数据的时候,比如多进程 RPC 框架的进程之间通信,常用共享内存队列。 但是共享内存队列难免会有 入队+出队 2次 memcpy 。...而且要变长共享内存队列,如果支持多生产者进程+多消费者进程 ,就要处理线程安全方面的问题, 比较麻烦。...process_vm_readv.2.html https://github.com/open-mpi/ompi/blob/master/opal/mca/btl/sm/btl_sm_get.c#L96 在此, 我提个设想,可以...process_vm_readv 实现一个多进程内存队列,相比之下,优势是: 在处理 多线程/多进程 并发时,更简单 省掉一次 memcpy。...为了方便,直接 posix mq 来传输 iovec 数组,也没有考虑多路复用。 真实项目可能需要 eventfd 之内的机制来做 notify。

    1.9K30

    一步到位Linux中安装配置MySQL及补坑

    环境         CentOS7.0   Mysql-5.7.17   root用户安装   关闭防火墙或让涉及到的端口通过。...如果你正在企业中使用RHEL,可能会比这个操作系统的最小RAM需求(256MB)明显多得多的物理内存。由此可见,如果有那么多RAM内存可以使用,自然可以在同一台机器上运行其它服务。...由于它可以为该数据库使用多达512MB的内存,所以在这种类型的系统上将需要至少1GB的RAM,以便它能够同时处理操作系统与数据库应用程序。 d、my-huge.cnf:是为企业中的数据库而设计的。...这些选择高度依赖于内存的数量、计算机的运算速度、数据库的细节大小、访问数据库的用户数量以及在数据库中装入并访问数据的用户数量。随着数据库和用户的不断增加,数据库的性能可能会发生变化。...解决步骤如下: 以MySQL用户"root"密码形式登录。 mysql -u root -p 删除空用户,强烈建议。

    1.2K100
    领券