1、为何高并发下容易oom

1)首先我们了解当执行垃圾回收的时候,会导致进程暂停,从而使我们的程序卡死;进程长时间暂停,又会导致大量的请求积压等待处理,垃圾回收刚刚结束,更多的请求立刻涌进来,迅速占满内存,再次被迫执行垃圾回收,进入了一个恶性循环。如果垃圾回收的速度跟不上创建对象的速度,还可能会产生内存溢出的现象。

所以说往往在高并发的情况下更容易发生oom。

2)除此之外垃圾回收算法产生内存碎片也会产生影响。内存碎片在GC执行标记-清除算法时产生,当完成对象的回收后,会需要再整理内存碎片,将不连续的空闲内存移动到一起,以便空出足够的连续内存空间供后续使用。和垃圾回收算法一样,内存碎片整理也有很多非常复杂的实现方法,但由于整理过程中需要移动内存中的数据,也都不可避免地需要暂停进程。

内存碎片举例来说:内存中有10个字节,初始化了5个short类型的对象,每个short占2字节,程序运行一段时间后,有两个short使用后被回收了,此时有想新建一个int,这时可能是不成功的,

因为回收掉的两个short可能不是连续的,但是创建int必须是连续的4个字节,所以就产生了占用空间的内存碎片。

2、高并发下的内存管理技巧

1)尽量少的创建对象,优化业务处理逻辑,特别是占用内存大的对象。例如:我们可以把收到请求的 Request 对象在业务流程中一直传递下去,而不是每执行一个步骤,就创建一个内容和 Request 对象差不多的新对象。

2)考虑自行回收并重用对象。建立一个对象池。收到请求后,在对象池内申请一个对象,使用完后再放回到对象池中,这样就可以反复地重用这些对象,非常有效地避免频繁触发垃圾回收。

3)尽可能使用内存大的服务器

oom 如何避免 高并发_高并发下的内存管理技巧相关推荐

  1. 队列处理高并发_高并发场景下缓存处理的一些思路

    在实际的开发当中,我们经常需要进行磁盘数据的读取和搜索,因此经常会有出现从数据库读取数据的场景出现. 但是当数据访问量次数增大的时候,过多的磁盘读取可能会最终成为整个系统的性能瓶颈,甚至是压垮整个数据 ...

  2. 队列处理高并发_高并发架构消息队列面试题解析

    面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: ...

  3. mysql余额高并发_高并发下作余额扣减的一些经验

    前一段时间参加了优化一个老的计费系统,学习了一些高并发下做余额扣减的常用手段,也做了一些尝试,因此在这里总结记录一下. 问题描述 对于一个计费系统来说,并发问题事实上分为两类,一类是应用并发高,也就是 ...

  4. ci mysql高并发_高并发访问mysql时的问题(一):库存超减

    标签: 如果在对某行记录的更新时不采取任何防范措施,在多线程访问时,就容易出现库存为负数的错误. 以下用php.mysql,apache ab工具举例说明: mysql表结构 CREATE TABLE ...

  5. .net core高并发_高并发下的Node.js与负载均衡

    阅读本文约需要6分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下浅谈前端自动化构建的相关知识,今天跟大家分享浅谈前端自 ...

  6. python websocket异步高并发_高并发异步uwsgi+web.py+gevent

    为什么用web.py? python的web框架有很多,比如webpy.flask.bottle等,但是为什么我们选了webpy呢?想了好久,未果,硬要给解释,我想可能原因有两个:第一个是兄弟项目组用 ...

  7. oom 如何避免 高并发_【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!...

    [高并发]高并发环境下如何防止Tomcat内存溢出?看完我懂了!! 发布时间:2020-04-19 00:47, 浏览次数:126 , 标签: Tomcat 写在前面 随着系统并发量越来越高,Tomc ...

  8. 多线程导出excel高并发_怎么理解分布式、高并发、多线程

    一.什么是分布式? 分布式更多的是一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段,该领域需要解决的问题极多,在不同的技术层面上,又包括:分布式文件系统.分布式缓存.分布式数据库. ...

  9. 在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?

    在高并发.高负载的情况下,如何给表添加字段并设置DEFAULT值? 在高并发.高负载的情况下,如何给表添加字段并设置DEFAULT值? 在Oracle 12c之前,当Oracle表数据量上亿时,对表执 ...

  10. tcp/udp高并发和高吐吞性能测试工具

    在编写一个网络服务的时候都比较关心这个服务能达到多少并发连接,而在这连接的基础上又能达到一个怎样的交互能力.编写服务已经是一件很花力气的事情,而还要去编写一个能够体现结果的测试工具就更加消耗工作时间. ...

最新文章

  1. Unity3D 多人协作开发 环境搭建 笔记(场景合并)
  2. python中的迭代器,生成器,闭包,装饰器,@property
  3. 多线程爬虫python_一个简单的多线程Python爬虫
  4. bean定义的继承 - Spring Framework reference 2.0.5 参考手册中文版
  5. Python基础语法学习(字符串)
  6. awk收不到数据的问题
  7. shell管道重定向程序的实现
  8. JMM和synchronized
  9. EF CodeFirst下的自动迁移
  10. 20190226-SecureCRT连接linux显示中文乱码
  11. 高吞吐低延迟Java应用的垃圾回收优化
  12. 星际译王,金山词霸,有道词典,词库下载 1
  13. 禅道的下载和安装教程(Linux版)
  14. java工程师简历项目经验
  15. 时钟天气小插件显示没服务器,天气时钟小插件大全
  16. C++11 auto类型说明符如for(atuo x : s)
  17. bzoj1597: 土地购买
  18. 你真的熟练运用 HTML5 了吗,这10 个酷炫的 H5 特性你会几个?
  19. 中班科学计算机,中班科学活动《蜗牛吃什么》
  20. 阿里云oss中解决IE浏览器下载中文文件时乱码问题

热门文章

  1. VegaFEM免费试用
  2. Windows Installer服务总是自动关闭导致无法安装在win10上安装英伟达显卡驱动的解决方案...
  3. 中国眼下拥有的人造卫星的种类及其作用
  4. HDU - 1166 敌兵布阵(线段树模板)(入门题)
  5. 树莓派显示中文和添加中文输入法
  6. python处理搜狗新闻数据_140万条
  7. 音频开发之——pulseaudio
  8. Flash闪存储存原理以及NAND flash、NOR flash(详细)对比总结
  9. Chrome打不开baidu首页的问题
  10. ES6之你应该知道的知识(一)