MySQL案例02:(MyCAT報錯) [ERROR][$_NIOREACTOR-3-RW] caught err: java.lang.OutOfM emoryError: Unable to acquire 131072 bytes of memory, got 0

来源:https://www.cnblogs.com/rangle/archive/2018/05/10/9019030.html
-Advertisement-
Play Games

上班坐下來沒多久,接同事電話說有兩台mysql伺服器無法訪問,其中這兩台伺服器是mycat伺服器+MySQL伺服器,具體處理過程如下: 一、錯誤信息 錯誤信息01: 錯誤信息02: 錯誤信息03: 二、錯誤原因 1、針對錯誤信息01,基本可以斷定是由於伺服器jvm設置不當,導致記憶體溢出。 2、針對錯 ...


上班坐下來沒多久,接同事電話說有兩台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 = 1964)
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>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 通過數據交換平臺上傳較大的文件時,經常會出現導入失敗情況,換種方式通過新數據開發平臺(stark)也可以輕鬆實現外部數據與hive的數據關聯。 --第一步、導入csv文件到hive --stark數據開發平臺——>資源管理——>搜索欄右邊+號——>上傳資源(資源類型:選擇普通文件) --第二步、建表 ...
  • 本文由 網易雲 發佈。 作者:範欣欣 本篇文章僅限內部分享,如需轉載,請聯繫網易獲取授權。 眾所周知,HBase預設適用於寫多讀少的應用,正是依賴於它相當出色的寫入性能:一個100台RS的集群可以輕鬆地支撐每天10T 的寫入量。當然,為了支持更高吞吐量的寫入,HBase還在不斷地進行優化和修正,這篇 ...
  • 本文由 網易雲 發佈。 作者:唐雕龍 本篇文章僅限內部分享,如需轉載,請聯繫網易獲取授權。 面向新手的hadoop+hive學習環境搭建,加對我走過的坑總結,避免大家踩坑。 對於hive相關docker,並沒有官方的docker,第三方維護經過測試各種不靠譜,所以才想到自己搭建一套,然後後期在整理成 ...
  • 1. Flink的引入 這幾年大數據的飛速發展,出現了很多熱門的開源社區,其中著名的有 Hadoop、Storm,以及後來的 Spark,他們都有著各自專註的應用場景。Spark 掀開了記憶體計算的先河,也以記憶體為賭註,贏得了記憶體計算的飛速發展。Spark 的火熱或多或少的掩蓋了其他分散式計算的系統身 ...
  • 在使用cx_Oracle模塊讀取Oracle資料庫中的中文記錄時,返回值皆為?,後google得此佳文,遂問題得以解決,特此記之。 Oracle資料庫版本是10g,字元集是AL32UTF8. 編寫的python腳本中需要加入如下幾句: 這樣可以保證select出來的中文顯示沒有問題。 要能夠正常的i ...
  • 本篇介紹如何使用SSIS和作業完成自動更新目標數據任務。 ** 溫馨提示:如需轉載本文,請註明內容出處。** 本文連接:http://www.cnblogs.com/grom/p/9018978.html 筆者需要定期從伺服器更新N家客戶的遠程伺服器數據,上一篇的存儲過程是其中一個更新方法,後來隨著 ...
  • 上題: In this tutorial you will create a stored procedure and triggers to check a complex constraint. Consider the table definition below: While the uni ...
  • 資料庫的基本操作命令 15.索引 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...