最近常在系统中发现内存不够用的情况,这里简单总结下对应场景和处理思路
背景:线上很多客户生成报表失败,由于采用是celery和异步方案,事后只能去查查日志,没发现异常情况,为了复现场景只能后台手动执行下脚本来生成,过程中用top,htop或者free来观察状态,发现在转pdf过程中内存一直增加,最 后不够用导致失败。生pdf存在该问题,rtf不存在。
分析:pdf的生成使用了第三方工具包,过程中使用shell命令调用执行,他的内部逻辑无法去控制和改变,所以只能从os层面和业务上想办法。
方案1:加物理内存,只能临时应付。而且比较麻烦,不能长久解决问题。交付物不变。
背景:线上很多客户生成报表失败,由于采用是celery和异步方案,事后只能去查查日志,没发现异常情况,为了复现场景只能后台手动执行下脚本来生成,过程中用top,htop或者free来观察状态,发现在转pdf过程中内存一直增加,最 后不够用导致失败。生pdf存在该问题,rtf不存在。
分析:pdf的生成使用了第三方工具包,过程中使用shell命令调用执行,他的内部逻辑无法去控制和改变,所以只能从os层面和业务上想办法。
方案1:加物理内存,只能临时应付。而且比较麻烦,不能长久解决问题。交付物不变。
方案2:加swap,只能临时解决,不过比较简单方便,对于处理第一象限中紧急重要的事情可以这样做。交付物不变。
具体方法如下:
一、
dd if=/dev/zero of=/root/swap bs=1024 count=1024000count表示block的数量,一般一个block为1k,这样就创建了一个1G的文件。不过需要注意在/tmp目录下的文件,在系统重启后会清理,所以最后不要放在/tmp下。
二、
变为swsp分区
mkswap /root/swap三、
使其变为有效状态
swapon /root/swap四、
为了使其在重启后也有效。需要把信息写入/etc/fstab中。格式如下:
/root/swap swap swap defaults 0 0五、
增加前:
增加后:
明显看到free 增加了1G,这时候在去执行生成报表的程序就OK了。
方案3:修改代码,分成多份报表提供给客户。这样就不会引发内存不够的问题。但需要客户同意,交付物改变。
方案4:长久方案,拆分成更细粒度 ,交付物改变。
从合理角度来看。方案4更加合理,其他就是临时紧急的修改方案。目前已经使用方案四进行改进了。
相关推荐
但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。...
但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。...
MAT 是一个开源的java内存分析工具,能够快速的分析dump文件,可以直观的看到各个对象在内存占用的量大小,以及类实例的数量,对象之间的引用关系,找出对象的GC Roots相关的信息,此外还能生成内存泄露报表,疑似...
(详细参见附录): C/C++缺陷类型样例 空指针释放 内存管理问题(如:内存泄漏) 数组越界 未初始化数据使用 编码风格问题(如:在条件中赋值) Java 缺陷类型样例 效率错误(如:空的 finalize 方法) 可维护性...
修正偶发复杂拓扑图编辑溢出问题; 修正偶发水平信息点导入时系统无响应问题; 修正部分跨SQL版本,如2000/2008之间的不兼容性问题; 修正在SQL 2008下支持多项目问题; 修正测试数据导入异常问题; ...
1.9.1 内存配置 18 1.9.2 数据存储 20 第 2 章 日期处理 23 2.1 日期类型概述 23 2.2 日期处理函数 25 2.2.1 日期增减函数 25 2.2.2 日期信息获取函数 26 2.2.3 日期差值计算函数 27 2.2.4...
要求实现:图书的录入、查询、借阅、清理、统计等功能、还要实现对每天的借阅情况进行统计并打印出统计报表,操作界面要尽量完善。图书资料信息必须保存在文件中。 2、信号通信与进程控制 (l)进程的创建:编写一段...
initializer10-5初始化只读数据10-6在构造器中使用out与ref10-7struct构造器10-7-1struct构造器的限制10-8static构造器10-8-1使用static构造器初始化静态成员10-8-2static构造器的限制10-9对象与内存10-9-l对象的...
initializer10-5初始化只读数据10-6在构造器中使用out与ref10-7struct构造器10-7-1struct构造器的限制10-8static构造器10-8-1使用static构造器初始化静态成员10-8-2static构造器的限制10-9对象与内存10-9-l对象的...
”操作符 22 <br>2.4 表达式与关键词 22 <br>0045 正确使用“&&”和“||” 22 <br>0046 如何处理程序“溢出”错误 23 <br>0047 有效使用base关键字 23 <br>0048 typeof表达式的使用 23...