执行sql,提示Illegal instruction(非法指令)
打包环境
x86+cento6+gcc10
运行环境
海光(x86)+银河麒麟v10sp2+gcc7
原因
在测试postgis340+最新依赖库的版本,执行的三维sql出现数据库断开连接。
在执行的时候发现sql的cpu消耗很大,其实这不是重点,应该是卡主的原因
通过数据库日志,Illegal instruction(非法指令)
问了下内核的同事,他们给了个办法,通过pid去逐步调试
问题调查
1、使用psql进行连接
2、获取psql的backend
select pg_backend_pid();
-------------------------
902013
3、再打开一个tab页,进入到bin目录,进行逐步调试。
cd 进入到数据库bin目录
4、执行监控调试
gdb -p 902013
5、按c让程序继续执行,程序会停在出异常的地方。卡在了二进制不相等的地方。
我这次停在了libgmp.so下,因为打包用的gcc10,麒麟v10是gcc7,可能存在差异。
还有种可能是x86或者centos的一些特殊属性添加进了gmp.so,导致麒麟不认。
也可能麒麟有了自己的优化,对这块有所改动。总之各方面原因。
解决办法
最好的解决办法,即使不能芯片一样,系统也需要一样,在麒麟下打包肯定是没问题的