关于Amoeba读取longblob字段的问题_MySQL
bitsCN.com
最近有一个应用使用Amoeba从几个库中读取MySQL中含有longblob字段的表,老是报Session was killed。
经查是Amoeba中可读通道的缓存大小引起的。原来在com.meidusa.amoeba.net.io.PacketInputStream类中,有一个属性maxPacketSize,限制了可读通道的缓存大小,如果当前读取的记录的长度大于maxPacketSize,就会报错。所以我们必须把它调大点。
Java代码
/** 最大容量 */
protected static final int MAX_BUFFER_CAPACITY = 1024 * 1024 * 2;
private int maxPacketSize = MAX_BUFFER_CAPACITY;
public int getMaxPacketSize() {
return maxPacketSize;
}
public void setMaxPacketSize(int maxPacketSize) {
this.maxPacketSize = maxPacketSize;
}
maxPacketSize默认是2MB,但是发现setMaxPacketSize方法没有在其它地方有调用,应该是不可配置的,因此我直接修改了MAX_BUFFER_CAPACITY,重新打包扔上去就没问题了。
另外,当maxPacketSize大小不足时,用SQLYog连代理时的时候,发现一个有趣的现象。假如我有一表,各字段长度如下:
field1 | field2
1M | 3M
如果我先执行:SELECT field2 FROM tab
这时出错:Lost connection to MySQL server during query
再执行:SELECT field1 FROM tab
SQLYog就没有响应了,然后amoeba抛OOM异常,屡试不爽。查DUMP文件后,发现AuthingableConnectionManager 和 Log4j的DailyRollingFileAppender塞满了内存。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在Go語言中,通道(chan)是goroutine之間溝通的管道,是goroutine與另一個goroutine溝通的媒介。通道是一種技術,它允許一個goroutine將資料發送到另一個goroutine;預設情況下,通道是雙向的,這意味著goroutine可以透過同一通道發送或接收資料。

在Go中,我們可以使用chan關鍵字將函數通道作為函數參數傳遞,從而輕鬆地在函數之間共享和傳遞資料。具體操作步驟如下:建立一個通道來傳遞特定類型的資料。在函數中使用chan關鍵字和通道名稱將通道作為參數傳遞。使用單向通道

管道和通道是Go中實現並行性與並發性的重要工具。它們可以透過以下幾種方式優化Go函數效能:管道:實現並行I/O,提高吞吐量。通道:緩衝管道,管理運算密集型任務的並發執行。選擇性接收:從多個通道接收數據,提高效率。

通道是Go語言中用於在並發函數間安全傳遞資料的通訊機制,提供的資料競爭保護避免直接存取共享記憶體。通道類型包括無緩衝通道(chanT)和緩衝通道(chanT,int)。規則包括發送值(

透過Golang實現SelectChannelsGo並發式程式設計的效率提升引言:在當今的軟體開發領域,高效的並發程式設計是至關重要的。並發程式設計可以最大程度地利用現代處理器的多核心能力,提高程式的執行效率和效能。 Golang是一種以並發性為重點設計的程式語言,透過其內建的goroutine和channel機制,可以輕鬆實現高效的並發程式設計。本文將透過Golang中的

在golang中,可以使用close()函數來關閉通道,語法「close(msg_chan)」。通道(chan)是一種系統資源,因此在不需要使用chan 時,需要使用內建函數close來手動關閉管道。注意如果向一個已經關閉的管道發送數據,那麼程式會pannic。

在Go語言中:函數並發控制允許使用關鍵字go或goroutine建立並發執行的函數。通道是一個緩衝隊列,用於在並發函數之間傳遞值,提供同步和通訊。可使用

Go語言中,通道的內部結構包含元素類型、緩衝區指標、互斥鎖、傳送和接收佇列。收發機制涉及喚醒goroutine來發送或接收資料。通道分為緩衝和無緩衝兩種。緩衝通道允許goroutine在沒有接收者的情況下發送數據,而無緩衝通道則需要發送前有接收者。
