重现步骤

[步骤]


D:\Window-Service\服务_智汇创想(1)_本地服务1号\Biz.dll!<>c__DisplayClass19_1.<InitRecommendProductStatistics>b__4+0x10
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll!WhereSelectListIterator`2.MoveNext+0xcc
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll!<DistinctIterator>d__64`1.MoveNext+0x4f
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll!System.Linq.Enumerable.Count+0xf4
D:\Window-Service\服务_智汇创想(1)_本地服务1号\Biz.dll!<>c__DisplayClass19_0.<InitRecommendProductStatistics>b__0+0x148
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll!WhereSelectListIterator`2.MoveNext+0x72
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Collections.Generic.List`1..ctor+0x1f8
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll!System.Linq.Enumerable.ToList+0x46
D:\Window-Service\服务_智汇创想(1)_本地服务1号\Biz.dll!Biz.WarehouseAreaResponsibility.WarehouseAreaResponsibilityService.InitRecommendProductStatistics+0xa3b
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.Tasks.Task.Execute+0x46
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.ExecutionContext.RunInternal+0x163
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.ExecutionContext.Run+0x14
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.Tasks.Task.ExecuteWithThreadLocal+0x215
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.Tasks.Task.ExecuteEntry+0x73
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.Tasks.ThreadPoolTaskScheduler.TryExecuteTaskInline+0x31
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.Tasks.TaskScheduler.TryRunInline+0x19e
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.Tasks.Task.WrappedTryRunInline+0x3a
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.Tasks.Task.WaitAll+0x1e2
D:\Window-Service\服务_智汇创想(1)_本地服务1号\Biz.dll!<>c__DisplayClass18_1.<AutoInitRecommendProductStatistics>b__1+0x1b8
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Collections.Generic.List`1.ForEach+0x64
D:\Window-Service\服务_智汇创想(1)_本地服务1号\Biz.dll!Biz.WarehouseAreaResponsibility.WarehouseAreaResponsibilityService.AutoInitRecommendProductStatistics+0x43f
D:\Window-Service\服务_智汇创想(1)_本地服务1号\SEOCheck.exe!ChinaDownLoadImage.Task.Warehouse.Task_AutoInitRecommendProductStatistics.Execute+0x32
D:\Window-Service\服务_智汇创想(1)_本地服务1号\RB.Utility.dll!RB.Utility.SystemTask.<doTask>b__43_0+0xa7
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.Tasks.Task.Execute+0x46
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.ExecutionContext.RunInternal+0x163
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.ExecutionContext.Run+0x14
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.Tasks.Task.ExecuteWithThreadLocal+0x215
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.Tasks.Task.ExecuteEntry+0x73
C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch+0x152
[Unmanaged to Managed Transition]
clr.dll!LogHelp_TerminateOnAssert+0xc13
clr.dll!LogHelp_TerminateOnAssert+0x9a6
clr.dll!LogHelp_TerminateOnAssert+0x2d4d
clr.dll!LogHelp_TerminateOnAssert+0x62f9
clr.dll!LogHelp_TerminateOnAssert+0x34c1
clr.dll!LogHelp_TerminateOnAssert+0x343c
clr.dll!LogHelp_TerminateOnAssert+0x336d
clr.dll!LogHelp_TerminateOnAssert+0x34fb
clr.dll!LogHelp_TerminateOnAssert+0x6260
clr.dll!LogHelp_TerminateOnAssert+0x3924
clr.dll!LogHelp_TerminateOnAssert+0x36d5
clr.dll!LogHelp_TerminateOnAssert+0x64bf
KERNEL32.dll!BaseThreadInitThunk+0x14
ntdll.dll!RtlUserThreadStart+0x21


时常 还会有异常



[02:00:20]  商户号:1,仓库:中国义乌1号仓库,统计产品出库数据异常,异常详情:   在 System.Text.StringBuilder.FormatError()
   在 System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
   在 System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
   在 System.String.Format(String format, Object[] args)
   在 Biz.WarehouseAreaResponsibility.WarehouseAreaResponsibilityService.InitRecommendProductStatistics(Int32 customerID, RB_WareHouse warehouse, Int32 currMoveType)

[结果]


[期望]

优化排查问题,减少运行时长 提升效率,减少对 CPU 内存的消耗,修复出现的错误
历史记录  
  1. 2024-11-14 17:15:45, 由 袁慧斌 创建。
  2. 2024-11-14 17:19:23, 由 李乐同 指派给 杨林军。
    修改了 指派给,旧值为 "liletong",新值为 "yanglinjun"。
  3. 2024-11-14 17:20:36, 由 杨林军 指派给 程伟。
    修改了 指派给,旧值为 "yanglinjun",新值为 "chengwei"。
  4. 2024-11-14 17:22:15, 由 程伟 指派给 唐飞飞。
    修改了 指派给,旧值为 "chengwei",新值为 "tangfeifei"。
    帮忙查下是哪个组,直接指派过去
  5. 2024-11-15 13:50:14, 由 唐飞飞 指派给 程伟。
    修改了 指派给,旧值为 "tangfeifei",新值为 "chengwei"。

    对应的服务:统计产品周期内的出库数据

    可以在下面截图的界面验证

  6. 2024-11-18 11:58:23, 由 程伟 编辑。
    修改了 解决时效,旧值为 "0",新值为 "-1"。
    修改了 重现步骤,区别为:
    006- [02:00:20] 商户号:1,仓库:中国义乌1号仓库,统计产品出库数据异常,异常详情: 在 System.Text.StringBuilder.FormatError() 在 System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args) 在 System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args) 在 System.String.Format(String format, Object[] args) 在 Biz.WarehouseAreaResponsibility.WarehouseAreaResponsibilityService.InitRecommendProductStatistics(Int32 customerID, RB_WareHouse warehouse, Int32 currMoveType)
    006+ [02:00:20] 商户号:1,仓库:中国义乌1号仓库,统计产品出库数据异常,异常详情: 在 System.Text.StringBuilder.FormatError() 在 System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args) 在 System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args) 在 System.String.Format(String format, Object[] args) 在 Biz.WarehouseAreaResponsibility.WarehouseAreaResponsibilityService.InitRecommendProductStatistics(Int32 customerID, RB_WareHouse warehouse, Int32 currMoveType)
    007-
    007+ [结果]
    008- [结果]
    008+ [期望]
    009- [期望]
    009+ 优化排查问题,减少运行时长 提升效率,减少对 CPU 内存的消耗,修复出现的错误
    010- 优化排查问题,减少运行时长 提升效率,减少对 CPU 内存的消耗,修复出现的错误
    006- <p><br />[02:00:20] 商户号:1,仓库:中国义乌1号仓库,统计产品出库数据异常,异常详情: 在 System.Text.StringBuilder.FormatError()<br /> 在 System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)<br /> 在 System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)<br /> 在 System.String.Format(String format, Object[] args)<br /> 在 Biz.WarehouseAreaResponsibility.WarehouseAreaResponsibilityService.InitRecommendProductStatistics(Int32 customerID, RB_WareHouse warehouse, Int32 currMoveType)<br /><br /></p>
    006+ <p><br />[02:00:20] 商户号:1,仓库:中国义乌1号仓库,统计产品出库数据异常,异常详情: 在 System.Text.StringBuilder.FormatError()<br /> 在 System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)<br /> 在 System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)<br /> 在 System.String.Format(String format, Object[] args)<br /> 在 Biz.WarehouseAreaResponsibility.WarehouseAreaResponsibilityService.InitRecommendProductStatistics(Int32 customerID, RB_WareHouse warehouse, Int32 currMoveType)</p>
    007- <p></p>
    007+ <p>[结果]</p>
    008- <p>[结果]</p>
    008+ <br /><p>[期望]</p>
    009- <br /><p>[期望]</p>
    009+ 优化排查问题,减少运行时长 提升效率,减少对 CPU 内存的消耗,修复出现的错误
    010- 优化排查问题,减少运行时长 提升效率,减少对 CPU 内存的消耗,修复出现的错误

    问题原因:

    集合不断的累加数据,导致占用的内存越来越多,又没有及时释放,导致服务崩溃。

    1. 服务逻辑是,按照SKU+仓库维度,以规则设置的时间范围,分页统计每个SKU的出库数据,保存至数据库。

    2. 如果规则设置的时间范围越大,统计的数据量就越多,分页查询的次数就越多。每轮服务都要从第一天开始计算到最后一天,都要重复查询相同的数据。

    3. 每次分页查询的数据会不断的累加到一个集合变量,集合变量占用的内存越来越多,又没有及时释放,导致服务崩溃。


    优化方案:

    1. 数据分多轮服务执行,少量多次(服务设置5分钟执行一次),服务执行完后,能够及时释放变量占用的内存。

    2. 数据分多轮服务执行,每次只执行少量数据,并将数据记录到一个临时统计汇总表。仓库+SKU+类型只保留最新一条,记录当天的总数和累计总数,避免每次都要重复查询相同的数据。

    3. 计算累计出库总数和累计出库频次,计算完当天的出库数和计出库频次后,用昨天的累计出库总数和累计出库频次 + 今天的出库数和计出库频次,计算出最新的累计出库总数和累计出库频次。

    4. 每轮服务计算1天的数据,并记录已经计算的日期,下轮服务延续上轮服务的日期继续计算(规则设置的最大天数是30,预计最多执行30轮服务)。

    5. 服务执行完后,删除临时统计汇总表


    举例


    第一轮服务

    计算出来1月1号的数据,东莞仓,SKU01,当天的出库总数=10,当天的出库频次=5。那么,该SKU的累计出库总数=10,累计出库频次=5


    第二轮服务

    计算出来1月2号的数据,东莞仓,SKU01,当天的出库总数=8,当天的出库频次=6。那么,该天的累计出库总数=18,累计出库频次=11


    第三轮服务

    计算出来1月3号的数据,东莞仓,SKU01,当天的出库总数=3,当天的出库频次=7。那么,该天的累计出库总数=21,累计出库频次=18


    依此类推。。。。。


    三轮服务执行完后,数据库保存的SKU01的数据格式是

    1月3号,东莞仓,SKU01,当天的出库总数=3,当天的出库频次=7,累计出库总数=21,累计出库频次=18(执行多次后,一个SKU+仓库只有一条数据)



    确认下方案可以的话,就点性能问题,转给产品转成需求。


  7. 2024-11-18 11:58:30, 由 程伟 指派给 唐飞飞。
    修改了 指派给,旧值为 "chengwei",新值为 "tangfeifei"。
  8. 2024-11-18 12:18:30, 由 唐飞飞 解决,方案为 性能问题 。
    修改了 解决方案,旧值为 "",新值为 "performance"。
    修改了 解决版本,旧值为 "",新值为 "trunk"。
    修改了 解决日期,旧值为 "",新值为 "2024-11-18 12:18:15"。
    修改了 指派给 ,旧值为 "tangfeifei",新值为 "lixiaoming"。
    修改了 Bug状态 ,旧值为 "active",新值为 "resolved"。
    修改了 是否确认,旧值为 "0",新值为 "1"。
    修改了 解决者 ,旧值为 "",新值为 "tangfeifei"。
    转需求处理一下
  9. 2024-11-19 13:57:28, 由 李晓明 确认Bug。
  10. 2024-11-19 13:57:32, 由 李晓明 确认Bug。
  11. 2024-11-19 13:58:35, 由 李晓明 激活。
    修改了 Bug状态 ,旧值为 "resolved",新值为 "active"。
    修改了 激活日期,旧值为 "",新值为 "2024-11-19 13:58:35"。
    修改了 激活次数,旧值为 "0",新值为 "1"。
    修改了 解决方案,旧值为 "performance",新值为 ""。
    修改了 解决日期,旧值为 "2024-11-18 12:18:15",新值为 "0000-00-00"。
    修改了 解决者 ,旧值为 "tangfeifei",新值为 ""。
    修改了 解决版本,旧值为 "trunk",新值为 ""。
    修改了 关闭日期,旧值为 "",新值为 "0000-00-00"。
  12. 2024-11-19 14:00:21, 由 李晓明 转为 需求,编号为 #25014 OMS:性能优化-本地服务1 《任务_统计产品周期内的出库数据 》从凌晨 1点开始运行后,一直无法完成 消耗大量资源 容易导致服务崩溃 。
  13. 2024-11-19 14:00:21, 由 李晓明 关闭。
所属项目 技术中心-需求池
所属模块 供应链   仓储物流
所属计划
所属迭代
Bug类型
严重程度 一般
优先级 P1
Bug状态 已关闭
业务部门
影响功能
开发责任人 唐飞飞
测试责任人
解决时效 0
激活次数 1
激活日期 2024-11-19 13:58:35
是否确认 是
当前指派 Closed 于 2024-11-19 14:00:21
截止日期 0000-00-00
上线时间 0000-00-00 00:00:00
上线时效 -1
操作系统
浏览器
关键词
抄送给
所属迭代
相关需求
相关任务
由谁创建 袁慧斌 于 2024-11-14 17:15:44
影响环境 577
由谁解决 李晓明 于 2024-11-19 14:00:21
解决版本
解决方案 tostory
由谁关闭 李晓明 于 2024-11-19 14:00:21
最后修改 李晓明 于 2024-11-19 13:58:35