请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Kosen
金牌服务用户   /  发表于:2025-4-29 20:00  /   查看:90  /  回复:5
本帖最后由 Matthew.Xue 于 2025-4-30 10:02 编辑

我们现在GCExcel用了workbook.setAutoParse(true)之后遇到一个生产问题,导致线程一直没有释放,我这边贴上业务代码和日志,麻烦帮忙看看是什么问题哈。具体用户什么数据去写还在查找中。

  1.     protected void writeCell(IWorksheet sheet, Integer rowIndex, Integer colIndex, String value, IStyle cellStyle, Object cellType) {
  2.         IRange cell = sheet.getRange(rowIndex, colIndex);
  3. //        cell.setStyle(cellStyle);
  4.         try {
  5.             if (cellType instanceof String) {
  6.                 // 如果指定了单元格类型就按照指定类型,否则使用GCExcel内置的自动解析
  7.                 cell.setNumberFormat((String) cellType);
  8.             }
  9.             cell.setValue(value);
  10.         } catch (Exception e) {
  11.             LOGGER.error(e.getMessage(), e);
  12.             // 有报错就强制转换为字符串
  13.             cell.setNumberFormat("@");
  14.             cell.setValue(value);
  15.         }
  16.         cell.setHorizontalAlignment(HorizontalAlignment.Center);
  17.         cell.setVerticalAlignment(VerticalAlignment.Center);
  18.     }
复制代码




日志:

"DubboServerHandler-10.216.20.173:39086-thread-200" #408 daemon prio=5 os_prio=0 tid=0x00007f3400053800 nid=0x2c13a runnable [0x00007f337d456000]
   java.lang.Thread.State: RUNNABLE
        at com.grapecity.documents.excel.I.bR.h(Unknown Source)
        at com.grapecity.documents.excel.I.bR.c(Unknown Source)
        at com.grapecity.documents.excel.j.i.d(Unknown Source)
        at com.grapecity.documents.excel.j.i.a(Unknown Source)
        at com.grapecity.documents.excel.j.R.b(Unknown Source)
        at com.grapecity.documents.excel.i.cP.a(Unknown Source)
        at com.grapecity.documents.excel.o.j.I.a(Unknown Source)
        at com.grapecity.documents.excel.o.j.I.i(Unknown Source)
        at com.grapecity.documents.excel.i.at.d(Unknown Source)
        at com.grapecity.documents.excel.n.s.i(Unknown Source)
        at com.grapecity.documents.excel.n.s.h(Unknown Source)
        at com.grapecity.documents.excel.n.s.a(Unknown Source)
        at com.grapecity.documents.excel.n.n.a(Unknown Source)
        at com.grapecity.documents.excel.n.q.a(Unknown Source)
        at com.grapecity.documents.excel.n.p.b(Unknown Source)
        at com.grapecity.documents.excel.n.p.a(Unknown Source)
        at com.grapecity.documents.excel.n.p.a(Unknown Source)
        at com.grapecity.documents.excel.j.f.a(Unknown Source)
        at com.grapecity.documents.excel.j.f.a(Unknown Source)
        at com.grapecity.documents.excel.j.f.b(Unknown Source)
        at com.grapecity.documents.excel.j.i.b(Unknown Source)
        at com.grapecity.documents.excel.j.i.a(Unknown Source)
        at com.grapecity.documents.excel.j.R.a(Unknown Source)
        at com.grapecity.documents.excel.i.cP.b(Unknown Source)
        at com.grapecity.documents.excel.i.cP.a(Unknown Source)
        at com.grapecity.documents.excel.i.cS.c(Unknown Source)
        at com.grapecity.documents.excel.i.a.f(Unknown Source)
        at com.grapecity.documents.excel.o.l.A.j(Unknown Source)
        at com.grapecity.documents.excel.i.at.e(Unknown Source)
        at com.grapecity.documents.excel.i.i.b(Unknown Source)
        at com.grapecity.documents.excel.n.s.a(Unknown Source)
        at com.grapecity.documents.excel.n.n.a(Unknown Source)
        at com.grapecity.documents.excel.n.q.a(Unknown Source)
        at com.grapecity.documents.excel.n.p.b(Unknown Source)
        at com.grapecity.documents.excel.n.p.a(Unknown Source)
        at com.grapecity.documents.excel.n.p.a(Unknown Source)
        at com.grapecity.documents.excel.j.f.a(Unknown Source)
        at com.grapecity.documents.excel.j.f.a(Unknown Source)
        at com.grapecity.documents.excel.j.f.b(Unknown Source)
        at com.grapecity.documents.excel.j.i.a(Unknown Source)
        at com.grapecity.documents.excel.j.i.a(Unknown Source)
        at com.grapecity.documents.excel.j.R.a(Unknown Source)
        at com.grapecity.documents.excel.o.k.as.j(Unknown Source)
        at com.grapecity.documents.excel.i.at.e(Unknown Source)
        at com.grapecity.documents.excel.i.i.b(Unknown Source)
        at com.grapecity.documents.excel.n.s.a(Unknown Source)
        at com.grapecity.documents.excel.n.n.a(Unknown Source)
        at com.grapecity.documents.excel.n.q.a(Unknown Source)
        at com.grapecity.documents.excel.n.p.b(Unknown Source)
        at com.grapecity.documents.excel.n.p.a(Unknown Source)
        at com.grapecity.documents.excel.n.p.a(Unknown Source)
        at com.grapecity.documents.excel.j.f.a(Unknown Source)
        at com.grapecity.documents.excel.j.f.a(Unknown Source)
        at com.grapecity.documents.excel.j.f.b(Unknown Source)
        at com.grapecity.documents.excel.j.i.b(Unknown Source)
        at com.grapecity.documents.excel.j.i.a(Unknown Source)
        at com.grapecity.documents.excel.j.R.a(Unknown Source)
        at com.grapecity.documents.excel.i.cP.b(Unknown Source)
        at com.grapecity.documents.excel.n.n.j(Unknown Source)
        at com.grapecity.documents.excel.n.n.a(Unknown Source)
        at com.grapecity.documents.excel.n.q.a(Unknown Source)
        at com.grapecity.documents.excel.n.q.a(Unknown Source)
        at com.grapecity.documents.excel.n.p.i(Unknown Source)
        at com.grapecity.documents.excel.K.aX.n(Unknown Source)
        at com.grapecity.documents.excel.Workbook.calculate(Unknown Source)
        at com.grapecity.documents.excel.cm.setValue(Unknown Source)
        at com.sf.bdp.report.spreadsheet.service.AbstractBaseTable.writeCell(AbstractBaseTable.java:182)
        at com.sf.bdp.report.spreadsheet.service.PivotTable.writeRowAndValue(PivotTable.java:215)
        at com.sf.bdp.report.spreadsheet.service.PivotTable.writeRowAndValue(PivotTable.java:246)
        at com.sf.bdp.report.spreadsheet.service.PivotTable.writeRowAndValue(PivotTable.java:246)
        at com.sf.bdp.report.spreadsheet.service.PivotTable.writeTableBody(PivotTable.java:140)
        at com.sf.bdp.report.spreadsheet.service.PivotTable.writeTable(PivotTable.java:111)
        at com.sf.bdp.report.spreadsheet.service.SpreadsheetWriter.readAndWriteData(SpreadsheetWriter.java:245)
        at com.sf.bdp.report.spreadsheet.service.SpreadsheetWriter.writeSheetData(SpreadsheetWriter.java:218)
        at com.sf.bdp.report.spreadsheet.service.SpreadsheetDownloadServiceImpl.runInst(SpreadsheetDownloadServiceImpl.java:253)
        at com.alibaba.dubbo.common.bytecode.Wrapper19.invokeMethod(Wrapper19.java)
        at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)
        at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)
        at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)
        at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:70)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:132)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:113)
        at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84)
        at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170)
        at com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)
        at com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)


5 个回复

倒序浏览
Matthew.Xue
超级版主   /  发表于:2025-4-30 11:44:10
沙发
您好,在和您沟通后,未能复现您遇到的问题。
请您上传一个可复现的demo,我继续帮您调研。
回复 使用道具 举报
Kosen
金牌服务用户   /  发表于:2025-4-30 18:02:06
板凳
Matthew.Xue 发表于 2025-4-30 11:44
您好,在和您沟通后,未能复现您遇到的问题。
请您上传一个可复现的demo,我继续帮您调研。

初步定位到因为我们现在串行去写所有数据页,且用户报表页公式特别多且复杂。那么数据页每填一个单元格都会触发报表页上千个公式重复计算一次,最终指数上升次数的计算公式把CPU打爆了。准备按照填数据之前暂停所有公式计算,在所有数据填完后再单独计算一次公式去修改,应该能解决这个问题。
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-5-6 09:44:18
地板
Kosen 发表于 2025-4-30 18:02
初步定位到因为我们现在串行去写所有数据页,且用户报表页公式特别多且复杂。那么数据页每填一个单元格都 ...

是的,由于您进行了多次数据绑定的设置,每次都会触发公式重算,导致速度变慢。
可以先暂停计算,等到所有操作结束后再重算一次,这样可以节省大量的时间。
回复 使用道具 举报
Kosen
金牌服务用户   /  发表于:2025-5-6 16:09:47
5#
Matthew.Xue 发表于 2025-5-6 09:44
是的,由于您进行了多次数据绑定的设置,每次都会触发公式重算,导致速度变慢。
可以先暂停计算,等到所 ...

这个问题通过先暂停公式再计算的方式已解决,这个帖子可以关了哈
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-5-6 16:46:53
6#
好的,有问题欢迎发新帖~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部