本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802968.html?templateId=1718516
问题现象
某客户在通过yasql查询Oracle数据时,报如下异常:
SQL> select 1 from dual@link_oracle;
YAS-07301 external module timeout, reason: yex_server heatbeat timeout
问题的风险及影响
dblink功能无法正常使用
问题影响的版本
所有的YashanDB版本
问题发生原因
查看YashanDB的run.log,有如下异常:
问题原因可能为操作系统资源紧张,无法fork出新的子进程。
解决方法及规避方式
操作系统资源紧张可能为进程数量过多或者内存不足,根据实际情况,停掉不需要的进程/增大进程数上限或者停止耗时内存的进程,释放内存资源。
问题分析和处理过程
在日志中打[YEX] failed to run yex_server, error no:-1时,YashanDB实际上执行了linux的函数system(const char * command),
正常这个函数执行成功返回0。
返回-1是不正常的情况,什么时候返回-1呢?
从glibc的源码system.c中可以看到,大概率是fork()失败返回-1。
经验总结
通过分析操作系统源码推断问题的可能原因。
YashanDB会在这里做优化,在出异常时在日志中提供更多的信息。