fukuball / jieba-php

"結巴"中文分詞:做最好的 PHP 中文分詞、中文斷詞組件。 / "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best PHP Chinese word segmentation module.
http://jieba-php.fukuball.com
MIT License
1.32k stars 260 forks source link

超出内存限制 #60

Open linhongzhao321 opened 4 years ago

linhongzhao321 commented 4 years ago

场景 默认精确度,初始化完成后,在swoole协程中循环运行。大概执行 1W+ 次分词后,会报超出内存限制,从报错前一刻最后一个数据开始重新执行分词任务,又会继续正常运行,但执行1W+次分词后又会再次出现。 PHP Fatal error: Allowed memory size of 335544320 bytes exhausted (tried to allocate 1179648 bytes) in /<隐藏路径>/vendor/fukuball/jieba-php/src/vendor/multi-array/MultiArray.php on line 121

疑问 请问有什么原因吗?或者是我需要提供更具体的信息?

linhongzhao321 commented 4 years ago

swoole协程是单线程模型,我想这个问题应该与是否在协程中执行无关

linhongzhao321 commented 4 years ago

改用small dict后问题解决,但不明白问题原因

linhongzhao321 commented 4 years ago

使用small,运行分析100W+次分析,依然超出内存,并不能根本解决问题

fukuball commented 4 years ago

@linhongzhao321 這樣看起來似乎是字典不斷在過程中被擴充,可以檢查一下使用方式為何會讓字典不斷擴大(比如印出 Array 的大小,基本上過程中不應該不斷擴大的)