mysql內(nèi)存泄露怎么辦 mysql 內(nèi)存

mysql經(jīng)常報(bào)Out of memory (Needed 3143840 bytes) 求解決~~

1、試下:sort_buffer_size = 2M

創(chuàng)新互聯(lián)服務(wù)緊隨時(shí)代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過十余年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計(jì)師、專業(yè)的網(wǎng)站實(shí)施團(tuán)隊(duì)以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對(duì)網(wǎng)站進(jìn)行成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、建設(shè)、維護(hù)、更新和改版,實(shí)現(xiàn)客戶網(wǎng)站對(duì)外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。

read_buffer_size = 2M

2、找到出問題的SQL,減少select出來的字段的數(shù)量,優(yōu)化語句。

mysql配置過大內(nèi)存導(dǎo)致無法啟動(dòng)怎么辦 如何解決

查看 /proc/meminfo

Tips:

“大內(nèi)存頁”也稱傳統(tǒng)大頁、大頁內(nèi)存等有助于 Linux 進(jìn)行虛擬內(nèi)存的管理,標(biāo)準(zhǔn)的內(nèi)存頁為 4KB,這里使用“大內(nèi)存頁”最大可以定義 1GB 的頁面大小,在系統(tǒng)啟動(dòng)期間可以使用“大內(nèi)存頁”為應(yīng)用程序預(yù)留一部分內(nèi)存,這部分內(nèi)存被占用且永遠(yuǎn)不會(huì)被交換出內(nèi)存,它會(huì)一直保留在那里,直到改變配置。(詳細(xì)介紹請(qǐng)看下面鏈接官方解釋)

那么這么大頁內(nèi)存是分配給誰的呢?

查詢一下:

shell /proc/sys/vm/hugetlb_shm_group

27

shell id 27

uid=27(mysql) gid=27(mysql) groups=27(mysql)

hugetlb_shm_group 文件里填的是指定大頁內(nèi)存使用的用戶組 id,這里查看到是 MySQL 組 id,那既然是給 MySQL 的為什么 free 等于 total,并且 mysql 還只有 20 多 G 實(shí)際使用內(nèi)存呢?

原來在 MySQL 中還有專門啟用大內(nèi)存頁的參數(shù),在 MySQL 大內(nèi)存頁稱為 large page。

查看 MySQL 配置文件

發(fā)現(xiàn)配置文件中確實(shí)有 large-page 配置,但出于禁用狀態(tài)。

后與業(yè)務(wù)確認(rèn),很早之前確實(shí)啟用過 mysql 的 large page,不過后面禁用了。排查到這基本就有了結(jié)論。

結(jié)論

這套環(huán)境之前開啟了 20000 的大內(nèi)存頁,每頁大小為 2MB,占用了 40G 內(nèi)存空間,給 MySQL 使用,并且 MySQL 開啟了 large page,但后來不使用的時(shí)候,只關(guān)閉了 MySQL 端的 large page 參數(shù),但沒有實(shí)際更改主機(jī)的關(guān)于大內(nèi)存頁的配置,所以導(dǎo)致,實(shí)際上主機(jī)上的還存在 20000 的大內(nèi)存頁,并且沒在使用,這一部分長期空閑,并且其他程序不能使用。

所以 MySQL 在使用 20G 內(nèi)存左右,整個(gè)主機(jī)內(nèi)存就飽和了,然后在部分條件下,就觸發(fā)了 OOM,導(dǎo)致 mysqld 被 kill,但主機(jī)上又有 mysqld_safe 守護(hù)程序,所以又再次給拉起來,就看到了文章初的偶爾連接不上的現(xiàn)象。

linux 下怎么優(yōu)化mysql占用內(nèi)存?

修改mysql配置文件,優(yōu)化緩存大小和連接數(shù)連接方式,優(yōu)化sql語句 ,記得mysql好像是有工具可以查看最占用資源的sql語句,找到他,優(yōu)化他。

安裝好mysql后,配制文件應(yīng)該在/usr/local/mysql/share/mysql目錄中,配制文件有幾個(gè),有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的網(wǎng)站和不同配制的服務(wù)器環(huán)境,當(dāng)然需要有不同的配制文件了。

一般的情況下,my-medium.cnf這個(gè)配制文件就能滿足我們的大多需要;一般我們會(huì)把配置文件拷貝到/etc/my.cnf 只需要修改這個(gè)配置文件就可以了,使用mysqladmin variables extended-status _u root _p 可以看到目前的參數(shù),有3個(gè)配置參數(shù)是最重要的,即key_buffer_size,query_cache_size,table_cache。

key_buffer_size只對(duì)MyISAM表起作用,

key_buffer_size指定索引緩沖區(qū)的大小,它決定索引處理的速度,尤其是索引讀的速度。一般我們設(shè)為16M,實(shí)際上稍微大一點(diǎn)的站點(diǎn) 這個(gè)數(shù)字是遠(yuǎn)遠(yuǎn)不夠的,通過檢查狀態(tài)值Key_read_requests和Key_reads,可以知道key_buffer_size設(shè)置是否合理。比例 key_reads / key_read_requests應(yīng)該盡可能的低,至少是1:100,1:1000更好(上述狀態(tài)值可以使用SHOW STATUS LIKE ‘key_read%’獲得)。 或者如果你裝了phpmyadmin 可以通過服務(wù)器運(yùn)行狀態(tài)看到,筆者推薦用phpmyadmin管理mysql,以下的狀態(tài)值都是本人通過phpmyadmin獲得的實(shí)例分析:

這個(gè)服務(wù)器已經(jīng)運(yùn)行了20天

key_buffer_size _ 128M

key_read_requests _ 650759289

key_reads - 79112

比例接近1:8000 健康狀況非常好

Mysql 5.7服務(wù)開啟之后,占內(nèi)存過多,怎么減?。?/h2>

如果我們查看“top”命令的輸出,我們會(huì)看到:MySQL 5.7

MySQL 8.0

這也展示出 MySQL8 使用的更多常駐內(nèi)存和虛擬內(nèi)存。特別是“可怕的”虛擬內(nèi)存,因?yàn)樗h(yuǎn)遠(yuǎn)超過這些 VM 上可用的 1GB 物理內(nèi)存。當(dāng)然,虛擬內(nèi)存使用(VSZ)是現(xiàn)代應(yīng)用程序?qū)嶋H內(nèi)存需求的一個(gè)很差的指標(biāo),但它確實(shí)證實(shí)了更高的內(nèi)存需求這個(gè)事。

實(shí)際上,正如我們從 “vmstat” 輸出中所知道的那樣,即使沒有太多的“空間”,MySQL 8 和 MySQL 5.7 都不會(huì)在低負(fù)載下使用 swap 分區(qū)。如果您有多個(gè)連接或希望在同一個(gè) VM 上運(yùn)行某些應(yīng)用程序,則可以使用 swap(如果未啟用交換,則可能導(dǎo)致 OOM)。

這是一個(gè)有趣的實(shí)驗(yàn),能看看我有多少可以驅(qū)動(dòng) MySQL 5.7 和 MySQL 8 的內(nèi)存消耗。

分享題目:mysql內(nèi)存泄露怎么辦 mysql 內(nèi)存
路徑分享:http://muchs.cn/article46/dossseg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷外貿(mào)建站、App設(shè)計(jì)、域名注冊自適應(yīng)網(wǎng)站、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)