lac
lac copied to clipboard
在Linux系统上用Java单线程批量做分词报错,terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
在Linux系统上用Java单线程批量做分词报错,大概处理了四十多万调数据之后报如下错误,并造成程序直接退出 terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc 请问这个问题什么原因导致的?
批量调用是否可能是因为查询query较长,导致内存不足?
批量调用是否可能是因为查询query较长,导致内存不足?
这个长度有限制吗?大概多长的字符串?
批量调用是否可能是因为查询query较长,导致内存不足?
重试了一下,处理了四千条数据 又报如下错误: *** Error in `java': double free or corruption (fasttop): 0x00007f942ff04530 *** ======= Backtrace: ========= /lib64/libc.so.6(+0x81329)[0x7f9432367329] /usr/local/xxxx/lad/output/java/liblacjni.so(ZN13Customization19parse_customizationERKSt6vectorISsSaISsEERS2+0x246)[0x7f940a244d66] /usr/local/xxxx/lad/output/java/liblacjni.so(_ZN3LAC3runERKSt6vectorISsSaISsEE+0x2a8)[0x7f940a241918] /usr/local/xxxx/lad/output/java/liblacjni.so(_ZN3LAC3runERKSs+0x9d)[0x7f940a241f3d] /usr/local/xxxx/lad/output/java/liblacjni.so(Java_com_baidu_nlp_LAC_run+0x121)[0x7f940a24a4f1] [0x7f941e9a5bea] ======= Memory map: ======== 00400000-00401000 r-xp 00000000 fd:00 101385405 /usr/xxxx/java/jdk1.8/bin/java 00600000-00601000 r--p 00000000 fd:00 101385405 /usr/xxxx/java/jdk1.8/bin/java 00601000-00602000 rw-p 00001000 fd:00 101385405 /usr/xxxx/java/jdk1.8/bin/java 0092d000-00aef000 rw-p 00000000 00:00 0 [heap]
这个问题貌似是应为java调用c,导致内存泄露的问题。在调用分词的地放加 synchronized 即可解决。