再记一次MemoryLeak分析
性能是优化出来的,不管是在上生产前,还是在上生产后。大部分性能在性能测试阶段就能发现问题,但也有一些性能问题,结合生产的环境,生产数据才能表现出来,成为一个显著的瓶颈。
这次是生成pdf造成的内存泄露,大体代码如下,具体表现是内存缓慢增长,在docker中比windows增长速度要快,但都有只增不回收的特点。usingSystem。Data;usingSystem。Reflection。Metadata;usingQuestPDF。Helpers;usingQuestPDF。Infrastructure;usingQuestPDF。Fluent;usingQRCoder;usingMicrosoft。AspNetCore。Mvc;usingQuestPDF。Drawing;usingQuestPDF;varbuilderWebApplication。CreateBuilder(args);varappbuilder。Build();app。MapGet(getpdf,(){vartablenewDataTable();for(vari0;i10;i){table。Columns。Add(i。ToString());}for(varrow0;row1000;row){table。Rows。Add(row。ToString(),row。ToString(),row。ToString(),row。ToString(),row。ToString(),row。ToString(),row。ToString(),DateTime。Nowwwewrwerewfdsfdswefwefewfwefwefewrow,row。ToString(),row。ToString());}returnTypedResults。File(GetPDF(table),contentType:applicationpdf,fileDownloadName:a。pdf);});app。Run();staticIContainerCellStyle(IContainercontainer){returncontainer。DefaultTextStyle(xx。SemiBold()。FontSize(11))。PaddingVertical(5)。BorderBottom(1)。BorderColor(Colors。Black);}staticbyte〔〕GetPDF(DataTabledt){vardocQuestPDF。Fluent。Document。Create(container{usingvarstreamFile。OpenRead(Path。Combine(AppDomain。CurrentDomain。BaseDirectory,fonts,MEIRYO。TTC));FontManager。RegisterFont(stream);Settings。EnableCachingtrue;Settings。EnableDebuggingfalse;container。Page(page{page。Size(PageSizes。A4);page。Margin(2,Unit。Centimetre);page。PageColor(Colors。White);page。DefaultTextStyle(xx。FontSize(14)。FontFamily(Meiryo));page。Content()。PaddingVertical(1,Unit。Centimetre)。Column(x{x。Item()。Table(table{table。ColumnsDefinition(columns{for(vari0;idt。Columns。Count;i){columns。RelativeColumn();}});table。Header(header{foreach(DataColumncolindt。Columns){header。Cell()。Element(CellStyle)。Text(col。ColumnName);}});foreach(DataRowrowindt。Rows){for(vari0;idt。Columns。Count;i){if(i7){byte〔〕qrCodeAsBitmapByteArrPngByteQRCodeHelper。GetQRCode(row〔i〕。ToString(),QRCodeGenerator。ECCLevel。Q,20,false);usingvarmsnewMemoryStream(qrCodeAsBitmapByteArr);table。Cell()。Image(qrCodeAsBitmapByteArr);}else{table。Cell()。Element(CellStyle)。Text(row〔i〕。ToString());}}}});});page。Footer()。AlignCenter()。Text(x{x。Span(Page);x。CurrentPageNumber();x。Span();x。TotalPages();});});});returndoc。GeneratePdf();}
各种。net的调试工具用上,都只能证明内存只增不减,连pmap都用上了,发现下面的一个大文件的内存占用,并且很多,大体都是在65M左右。AddressKbytesRSSDirtyModeMapping00007f4d54000000655366553665536rw〔anon〕
经过一天的测试,找不到具体的问,最后推测是生成Pdf后,生成的内存是非托管内存,GC回收不掉,每当有用户下载PDF时,就会积累内存,直到Pod崩掉。
干不掉bug,就干掉需求吧,因为经过统计这个下载pdf的使用量很低,可以下掉功能。同时把这个问题给QuestPDF提了个issues。就准备躺平。QuestPDF回应很快,说注册字体只用注册一次就行,多次注册会重复累加字体,37到40行代码,只在服务启动时加载一次即可,经过测试果然有效果。
在复盘时,总结,常规的思维在win下注册字体,多次注册不会让相同的字体保存多份,从而认知QuestPDF注册也是同理,造成下载一次就注册一次,造成内存积加,这也是为什么65M左右的内存一起在累加的原因。
后来,我又思考了一下,如果做一个支持高并发,高性能的web服务,像下载Excel,PDF这些操作,是不能在后台生成的,因为用户的一个文件的体积和用户的数据是有关系的,大小很难控件,如果耦合在web服务端来做这件事,肯定是个雷。也有的建议是用其他服务或cli异步生成,然后放在云存储上让用户下载,这也是一种解决方案。
我觉还是让web服务做自己擅长的事,提供数据,把文件生成组装操作转嫁给客户的浏览器来完成,这样既能减轻web服务的负载,又能充分利用客户端的资源,一举两得。
曾游记丨宁乡温泉来源华声在线华声见习记者曾冠霖长沙断崖式降温最适合泡温泉,但是去哪儿呢?看这里,宁乡灰汤温泉职工疗养院,从市区出发只需要一个小时。依山而建的温泉谷和无边际浴池,能同时带来视野和身体
实地采访崖子镇50吨大金矿才发现,原来乳山从东到西山脉都是金子2023年3月18日山东省地矿局发布消息,山东威海乳山的崖子镇西涝口村探获一处50吨大型金矿。西涝口村北有一座牧牛山,这座牧牛山不高,海拔300米。这次发现的矿床位于牧牛山北东方向
我国科考队通过多方配合监测冰川变化共谋美丽生态家园近日,由中国科学院大学中科院西北研究院青海大学三江源生态与高原农牧业国家重点实验室三江源生态保护基金会等多家机构联合组成的科考队,对黄河上游的阿尼玛卿山开展了综合科学考察。在阿尼玛
实拍老挝姑娘在河边洗澡,河水很干净,尴尬难以启齿人们选择去老挝游玩,会发现当地很多美女都是直接在河里洗澡的。(此处已添加小程序,请到今日头条客户端查看)他们之所以来到这里组团洗澡,主要是当地十分的炎热,到河边洗澡,能够达到解暑纳
这不是特效!湖北恩施舟行水上似悬浮只因河水太清澈2023年3月14日,湖北恩施,屏山村屏山旅游景区,游人在坐船游玩。在湖北省恩施土家族苗族自治州鹤峰县容美镇屏山村屏山旅游景区,这里的河水清澈见底,舟行水上如悬浮空中,美如画卷。杨
中美之间极有可能暴发一埸科技经济战争!据美国(华尔街日报)3月18日的一篇报导称,一些美国硅谷科技公司的高管与美国国会的共和党和民主党议員,都一致反对中国参与美国的科技行业!这些人成立了一个叫(国会)山(硅)谷联论坛的
青版财经小记者了解智慧停车智慧社区拥抱未来生活3月19日,青版财经小记者走进智慧停车头部企业松立集团参观研学。小记者们了解大数据下的智慧停车智慧社区等平台的建设,拥抱未来生活,初步认识已经上升为国家战略数字中国智慧城市建设。在
如果我跑得比光更快,我会长生不老吗?大有学问长生不老一直是人类向往的梦想,随着科学技术的发展,人们开始探讨从根本上击败衰老的方法。在这个过程中,有人提出了一个有趣的问题如果我跑得比光更快,我会长生不老吗?让我们从科学
Arbitrum空投到来一文带你详细了解Arbitrum是什么?Arbitrum是以太坊的乐观式Rollup扩容方案,有以下特性无需信任的安全性安全扎根于以太坊,任何人都可以确保正确的L2结果。若L2链完全宕机,仅凭以太
数据传输检错技术CRCCRC简介数据在传输过程中可能会因为传输介质故障或外界的干扰而产生比特差错(使原来的0变为1,原来的1变为0),从而导致接收方接收到错误的数据。为尽量提高接收方收到数据的正确率,在
风浪越大鱼越贵!华为宣布重要决定,美媒我们封锁了个寂寞华为是一家全球领先的信息通信技术解决方案供应商,其研发实力远超国人的想象。除了手机业务,华为在许多领域都有着出色的表现。在面对美国的无底线制裁和打压之下,华为依然能够从容应对,不断