MyCATApache / Mycat-Server

GNU General Public License v2.0
9.47k stars 3.85k forks source link

mycat1.6 core dump #1386

Open seair-jzh opened 7 years ago

seair-jzh commented 7 years ago

env:open-jdk1.8.0,mycat-1.6-release

hs_err_pid24398.txt

fireflyhoo commented 7 years ago

@magicdoom @HashZhang

  1. 建议使用 sun jdk
  2. 是否能够重现.
seair-jzh commented 7 years ago

sun jdk暂时没有尝试,但在1.5Release上没有问题,是一个分片表,简单地执行下面脚本,表的数据量很小,大概跑半个小时左右就会挂

!/bin/sh

for i in {1..100000} do mysql -h127.0.0.1 -P8066 -uxxx -pxxx -D dbxxx -e "select * from open_info" done

seair-jzh commented 7 years ago

欢迎Sun JDK1.8同样崩溃 确认与UnSafe的使用有关:

0 0x00007f06062535e5 in raise (sig=6)

at ../nptl/sysdeps/unix/sysv/linux/raise.c:64

1 0x00007f0606254dc5 in abort () at abort.c:92

2 0x00007f06062914f7 in __libc_message (do_abort=2,

fmt=0x7f0606379a60 "*** glibc detected *** %s: %s: 0x%s ***\n")
at ../sysdeps/unix/sysv/linux/libc_fatal.c:198

3 0x00007f0606296f3e in malloc_printerr (action=3,

str=0x7f0606379dd0 "double free or corruption (out)", 
ptr=<value optimized out>, ar_ptr=<value optimized out>) at malloc.c:6360

4 0x00007f0606299dd0 in _int_free (av=0x7f06065af120, p=0x7f0540005cc0,

have_lock=0) at malloc.c:4846

5 0x00007f0605cc93ee in Unsafe_FreeMemory ()

from /opt/jdk1.8.0_121/jre/lib/amd64/server/libjvm.so

seair-jzh commented 7 years ago

多线程调用clear问题。 (io.mycat.memory.unsafe.memory.mm.MemoryConsumer:MemoryConsumer.java:104) 2017-03-13 17:33:16,567 [WARN ][BusinessExecutor7] free longarray:io.mycat.memory.unsafe.array.LongArray@62144e38 java.lang.Exception at io.mycat.memory.unsafe.memory.mm.MemoryConsumer.freeLongArray(MemoryConsumer.java:103) at io.mycat.memory.unsafe.map.BytesToBytesMap.free(BytesToBytesMap.java:819) at io.mycat.memory.unsafe.map.UnsafeFixedWidthAggregationMap.free(UnsafeFixedWidthAggregationMap.java:259) at io.mycat.sqlengine.mpp.UnsafeRowGrouper.free(UnsafeRowGrouper.java:880) at io.mycat.sqlengine.mpp.DataNodeMergeManager.clear(DataNodeMergeManager.java:457) at io.mycat.backend.mysql.nio.handler.MultiNodeQueryHandler.outputMergeResult(MultiNodeQueryHandler.java:456) at io.mycat.sqlengine.mpp.DataNodeMergeManager.run(DataNodeMergeManager.java:376) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) (io.mycat.memory.unsafe.memory.mm.MemoryConsumer:MemoryConsumer.java:104) 2017-03-13 17:33:16,568 [WARN ][$_NIOREACTOR-2-RW] free longarray:io.mycat.memory.unsafe.array.LongArray@62144e38 java.lang.Exception at io.mycat.memory.unsafe.memory.mm.MemoryConsumer.freeLongArray(MemoryConsumer.java:103) at io.mycat.memory.unsafe.map.BytesToBytesMap.free(BytesToBytesMap.java:819) at io.mycat.memory.unsafe.map.UnsafeFixedWidthAggregationMap.free(UnsafeFixedWidthAggregationMap.java:259) at io.mycat.sqlengine.mpp.UnsafeRowGrouper.free(UnsafeRowGrouper.java:880) at io.mycat.sqlengine.mpp.DataNodeMergeManager.clear(DataNodeMergeManager.java:457) at io.mycat.backend.mysql.nio.handler.MultiNodeQueryHandler.clearResources(MultiNodeQueryHandler.java:740) at io.mycat.server.NonBlockingSession.clearHandlesResources(NonBlockingSession.java:506) at io.mycat.server.NonBlockingSession.execute(NonBlockingSession.java:107) at io.mycat.server.ServerConnection.routeEndExecuteSQL(ServerConnection.java:288) at io.mycat.server.ServerConnection.execute(ServerConnection.java:222) at io.mycat.server.handler.SelectHandler.handle(SelectHandler.java:105) at io.mycat.server.ServerQueryHandler.query(ServerQueryHandler.java:79) at io.mycat.net.FrontendConnection.query(FrontendConnection.java:324) at io.mycat.net.FrontendConnection.query(FrontendConnection.java:344) at io.mycat.net.handler.FrontendCommandHandler.handle(FrontendCommandHandler.java:71) at io.mycat.net.FrontendConnection.rawHandle(FrontendConnection.java:500) at io.mycat.net.FrontendConnection.handle(FrontendConnection.java:482) at io.mycat.net.AbstractConnection.onReadData(AbstractConnection.java:323) at io.mycat.net.NIOSocketWR.asynRead(NIOSocketWR.java:196) at io.mycat.net.AbstractConnection.asynRead(AbstractConnection.java:275) at io.mycat.net.NIOReactor$RW.run(NIOReactor.java:102) at java.lang.Thread.run(Thread.java:745) (io.mycat.memory.unsafe.memory.mm.MemoryConsumer:MemoryConsumer.java:104) 可以简单的在DataNodeMergeManager.clear加上sychronized解决