上班坐下来没多久,接同事电话说有两台mysql服务器无法访问,其中这两台服务器是mycat服务器+MySQL服务器,具体处理过程如下:

一、错误信息

错误信息01:

INFO   | jvm 3    | 2018/05/10 10:00:54 | 2018-05-10 10:00:54,406 [INFO ][$_NIOREACTOR-3-RW] close connection,reason:Bad:
java.lang.OutOfMemoryError: Unable to acquire 131072 bytes of memory, got 0 ,MySQLConnection [id=6173, lastTime=1525917654
250, user=username, schema=database10, old shema=database10, borrowed=true, fromSlaveDB=true, threadId=42067, charset=utf8, txIsolation=3,
autocommit=true, attachment=dn10{SELECT *
INFO | jvm 3 | 2018/05/10 10:00:54 | FROM cu_link
INFO | jvm 3 | 2018/05/10 10:00:54 | WHERE (customer_id = 1964
INFO | jvm 3 | 2018/05/10 10:00:54 | OR customer_link_id = )
INFO | jvm 3 | 2018/05/10 10:00:54 | AND state = 1
INFO | jvm 3 | 2018/05/10 10:00:54 | AND company_id = '3BD'
INFO | jvm 3 | 2018/05/10 10:00:54 | LIMIT 100000000}, respHandler=io.mycat.backend.mysql.nio.handler.MultiNodeQueryH
andler@530d01dc, host=xx.xx.xx.xx, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false] (io.mycat.net.
AbstractConnection:AbstractConnection.java:508)
INFO | jvm 3 | 2018/05/10 10:00:54 | 2018-05-10 10:00:54,407 [ERROR][$_NIOREACTOR-3-RW] caught err: java.lang.OutOfM
emoryError: Unable to acquire 131072 bytes of memory, got 0
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.memory.unsafe.memory.mm.MemoryConsumer.allocateLongArray(Memor
yConsumer.java:92)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.memory.unsafe.utils.sort.UnsafeInMemorySorter.<init>(UnsafeInM
emorySorter.java:114)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.memory.unsafe.utils.sort.UnsafeExternalSorter.<init>(UnsafeExt
ernalSorter.java:131)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.memory.unsafe.utils.sort.UnsafeExternalSorter.create(UnsafeExt
ernalSorter.java:98)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.memory.unsafe.utils.sort.UnsafeExternalRowSorter.<init>(Unsafe
ExternalRowSorter.java:64)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.sqlengine.mpp.DataNodeMergeManager.onRowMetaData(DataNodeMerge
Manager.java:249)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.backend.mysql.nio.handler.MultiNodeQueryHandler.fieldEofRespon
se(MultiNodeQueryHandler.java:643)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.backend.mysql.nio.MySQLConnectionHandler.handleFieldEofPacket(
MySQLConnectionHandler.java:192)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.backend.mysql.nio.MySQLConnectionHandler.handleData(MySQLConne
ctionHandler.java:118)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.net.handler.BackendAsyncHandler.offerData(BackendAsyncHandler.
java:36)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.backend.mysql.nio.MySQLConnectionHandler.handle(MySQLConnectio
nHandler.java:80)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.net.AbstractConnection.handle(AbstractConnection.java:263)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.net.AbstractConnection.onReadData(AbstractConnection.java:321)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.net.NIOSocketWR.asynRead(NIOSocketWR.java:190)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.net.AbstractConnection.asynRead(AbstractConnection.java:273)
INFO | jvm 3 | 2018/05/10 10:00:54 | at io.mycat.net.NIOReactor$RW.run(NIOReactor.java:102)
INFO | jvm 3 | 2018/05/10 10:00:54 | at java.lang.Thread.run(Thread.java:745)
INFO | jvm 3 | 2018/05/10 10:00:54 | (io.mycat.net.NIOReactor$RW:NIOReactor.java:132)

错误信息02:

LIMIT 100000000}, packetId=1], host=xx.xx.xx.xx, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false] frontend host:x.x.x.x/49657/username
2018-05-10 10:25:39.883 WARN [$_NIOREACTOR-2-RW] (io.mycat.backend.mysql.nio.handler.SingleNodeHandler.backConnectionErr(SingleNodeHandler.java:249)) - execute sql err : errno:1146 Table 'cr.vacode' doesn't exist con:MySQLConnection [id=89, lastTime=1525919139870, user=username, schema=cr, old shema=cr, borrowed=true, fromSlaveDB=true, threadId=553442, charset=utf8, txIsolation=3, autocommit=true, attachment=dn00{SELECT *
FROM vaCode
ORDER BY id DESC

错误信息03:

java.sql.SQLNonTransientException:  find no Route:SELECT * FROM `database03`.`cain` LIMIT 0

二、错误原因

1、针对错误信息01,基本可以断定是由于服务器jvm设置不当,导致内存溢出。

2、针对错误信息02,基本可以断定是由于在数据库服务器新增表,没有配置在mycat中或由于MyCAT大小写配置和数据库服务器表名大小写配置有关

3、针对错误信息03,基本可以断定路由问题

三、解决方案

1、查看系统内存

[root@localhost ~]# free -g
total used free shared buffers cached
Mem: 15 15 0 5 0 6
-/+ buffers/cache: 8 6
Swap: 7 5 2

2、查看系统日志

[root@localhost logs]#vi /var/log/message

如果是OOM的话,系统日志会记录的。

3、查看数据库日志和mycat日志

[root@localhost logs]#vi /home/mysql/err.log

[root@localhost logs]# vi /usr/local/mycat/logs/mycat.log
[root@localhost logs]# [root@localhost logs]# vi /usr/local/mycat/logs/wrapper.log

4、查看监控情况

通过zabbix查看系统CPU、内存、SWAP使用情况

5、查看具体进程对应资源消耗

[root@localhost ~]# top -p 31665

[root@localhost ~]# top -p 30388

通过ps 查看系统进程的时候和top查看资源消耗的时候,发现居然还跑着oracle进程,而且其sga设置为8G,PGA设置的是2G

这里看到实际设置的最大应用内存(21G+)已经超过了物理内存的实际最大值(15G),而写看到系统已经使用了swap分区(虽然现在看着还有7G左右的cache),说明

6、查看mycat的进程运行内存

下面的最大堆内存4G(具体使用情况可以通过jmap查看),单线程内存最大64M,最大的nio内存2G(DirectMemory是java nio引入的,直接以native的方式分配内存,不受jvm管理)

查看其具体配置文件

[root@localhost mycat]# more /usr/local/mycat/conf/wrapper.conf

# Java Additional Parameters
#wrapper.java.additional.1=
wrapper.java.additional.1=-DMYCAT_HOME=.
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:MaxPermSize=64M
wrapper.java.additional.4=-XX:+AggressiveOpts
wrapper.java.additional.5=-XX:MaxDirectMemorySize=2G
wrapper.java.additional.6=-Dcom.sun.management.jmxremote
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984
wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.10=-Xmx4G
wrapper.java.additional.11=-Xms1G # Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3 # Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=64 # Application parameters. Add parameters as needed starting from 1
wrapper.app.parameter.1=io.mycat.MycatStartup
wrapper.app.parameter.2=start

这里看内存设置还是正常范围内

7、最终解决方案

(由于开发联系我时,我测试数据库服务、MyCAT服务均正常,所以具体排查过程大致如上,后经与开发沟通,他们说是磁盘空间不足导致的,清理磁盘重启mycat问题解决)

8、资源统计

[root@localhost logs]# dstat -lrmc --top-io --top-mem --top-cpu
Terminal width too small, trimming output.
---load-avg--- --io/total- ------memory-usage----- ----total-cpu-usage---- ----most-expensive---- --most-expensive->
 1m   5m  15m | read  writ| used  buff  cach  free|usr sys idl wai hiq siq|     i/o process      |  memory process >
0.86 0.56 0.47|76.7   105 |8825M 7816k 6938M  181M|  4   1  92   3   0   0|init         16M  477k|mysqld      5789M>
0.86 0.56 0.47|1083   177 |8835M 7828k 6928M  181M| 30   4  47  19   0   1|mysqld      416k 4354k|mysqld      5789M>

MySQL案例03:(MyCAT报错) [ERROR][$_NIOREACTOR-3-RW] caught err: java.lang.OutOfM emoryError: Unable to acquire 131072 bytes of memory, got 0的更多相关文章

  1. 报错: WARN hdfs.DFSClient: Caught exception java.lang.InterruptedException

    WARN hdfs.DFSClient: Caught exception java.lang.InterruptedException 而且日志中没有错误. 官网语句:$ bin/hdfs dfs ...

  2. mavne install 报错org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException

    maven install 报错 org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.Invoc ...

  3. 【spring boot】spring boot 前台GET请求,传递时间类型的字符串,后台无法解析,报错:Failed to convert from type [java.lang.String] to type [java.util.Date]

    spring boot 前台GET请求,传递时间类型的字符串,后台无法解析,报错:Failed to convert from type [java.lang.String] to type [jav ...

  4. hibernate报错Unknown integral data type for ids : java.lang.String

    package com.model; // Generated 2016-10-27 14:02:17 by Hibernate Tools 4.3.1.Final /** * CmDept gene ...

  5. Spring mvc 报错:No qualifying bean of type [java.lang.String] found for dependency:

    具体错误: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean w ...

  6. wordcount在本地运行报错解决:Exception in thread "main" java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.native.NativeID$Windows.access

    在windows中的intellij中运行wordcount程序,控制台输出以下报错 在Intellij编辑器中解决办法:本地重新创建NativeIO类,修改一个方法返回值,然后用新建的NativeI ...

  7. 实体类中方法名尽量避免set,get,报错com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException)

    自己建了一个实体类 public class MissPoint implements Serializable{ private static final long serialVersionUID ...

  8. 完美解决报错Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'

    Failed to convert value of type 'java.lang.String' to required type 'java.util.Date' 首先这个错误的意思是 前台页面 ...

  9. 使用Axis2 插件 报错"An error occurred while completing process -java.lang.reflect.InvocationTargetException"

    参考 http://blog.csdn.net/sunitjy/article/details/6793654

随机推荐

  1. YC

    package com.hanqi; import java.util.*; public class yc{ public static void main(String[] args) { // ...

  2. 从golang-gin-realworld-example-app项目学写httpapi (四)

    https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/users/routers.go 路由定义 pa ...

  3. ajax实现跨域请求

    因为现在一直用的mvc,所以就以mvc来说说ajax跨域提交. 首先说说跨域,简单说就是不同域名访问,比如在aaa.com访问bbb.com. 就拿招聘网站来说,分为两种用户,求职者和企业,求职者端是 ...

  4. 一、C#简单读写

    using System.IO; static string configFileName = "config.json"; //不存在就直接新建文件夹 public static ...

  5. Emacs快捷键(较全)

    C = Control M = Meta = Alt | Esc Del = Backspace 基本快捷键(Basic) C-x C-f "find"文件, 即在缓冲区打开/新建 ...

  6. 【转】】Vue项目部署tomcat,刷新报错404解决办法

    转自[https://blog.csdn.net/g631521612/article/details/82835518] 解决方式: - 在tocmat的webapps下的项目中创建WEB-INF文 ...

  7. WORD列表缩进的文本起始点

    Figure 1 Figure 2 Figure 3 编号位置以刻度尺为起点0.74厘米(2个字符间距),文本缩进以刻度尺为起点2.96厘米(8个字符间距) 以上两者相减得到的值正好=特殊格式悬挂缩进 ...

  8. PHP修改图片

    这篇是关于修改图片的效果,主要还是用到php中的GD库中的函数,没想到php还有这凶残能力,出乎我的预料. 先看代码upload_image.php,主要是一个上传控件,用来选择图片 <html ...

  9. metasploit渗透测试笔记(内网渗透篇)

    x01 reverse the shell File 通常做法是使用msfpayload生成一个backdoor.exe然后上传到目标机器执行.本地监听即可获得meterpreter shell. r ...

  10. Windows环境下JDK的配置及多版本JDK切换的方法记录

    (这里记录了笔者了解的关于JDK环境配置的信息,以及针对系统上存在不同版本JDK时所尝试的解决方案.具体来说,是已安装 JDK 8 后,又安装了 JDK 9 时所遇到的问题和尝试的解决方法.这次记录以 ...