看板 FreeBSD 關於我們 聯絡資訊
※ 引述《sweetwords (米虫三號)》之銘言: : 最近 LAB 的 FreeBSD 測試機, : 常常開機太久後網頁資料連結到資料庫不是讀取太久, : 就是整個資料庫都連不到 1)有可能 DB Lock 或 DB connect 過多超出預設值, 2)也有可能記憶體用光,或超出 kern.maxfiles or kern.maxfilesperproc 或沒設妥 MySQL updatelog 的存放量以致硬碟滿了 或安裝時未規劃妥 RAID 或硬碟空間整體配置佈局 或者瞬間流量滿了(超出網卡或 switch 撐不住)_ 3)也有可能前端網頁程式不是很嚴謹,遇上 SQL injection 之類攻擊狀況。 1) 可以下 show full processlist 或以類似如下 #!/bin/sh PATH=/bin:/usr/bin:/usr/local/bin LockTxt=$(/usr/local/bin/mysql -u whoami -p'xxoo' -h192.168.x.x -e \ "show full processlist" | grep -v Sleep \ | grep -v Connect | grep -v '\-\-\-\-' | grep -v "Command" \ | egrep -v "[[:cntrl:]][0-1][[:cntrl:]]" \ | grep -v "processlist") if [ "$LockTxt" != "" ]; then echo "$LockTxt" | sed "s/^/$(date)\t/g" >> ~/dblock.log fi exit 0 方式寫成 script 放到 crontab 去跑並把 log 存起來,來察看是否有 lock 發生, 並根據經驗來判別該 lock 行為是否為人為失誤操作所致,比方說 SELECT * 之類, 或異常行為或疑似攻擊行為。 若是超出 MySQL max_connections 則要依需求來調整 my.cnf 在 [mysqld] 區段加上 max_connections = 1024 之類設定,並重啟 MySQL 即可。 2) 可以用 pstat -T 跟 df -h 與 netstat -m 之類察看, 像是若超出最大同時開啟檔案數也可以考慮以 sysctl 調高一些, 並以相關 snmp 工具來輔助確認流量方面是不是有問題。 3) 可能要多注意 web ap 內相關 SQL 檢驗跟表單檢查, 而 web app 的檔案權限, owner, group 也要注意 有閒錢的話可以考慮看看 WAF 產品。 : 每次都要 reboot 狀況才會改善 : 一直在想說是不是受到攻擊之類的? : 下了 netstat 去看 : c42e54ec stream 0 0 0 c42e59d8 0 0 /tmp/mysql.sock : c42e5604 stream 0 0 0 c3a3e3d4 0 0 /tmp/mysql.sock : c42e5a64 stream 0 0 0 c42e5460 0 0 /tmp/mysql.sock : 發現有這個暫存檔,不知是否是這個原因搞掛 mysql : 隨著開機時間越多,我也發現這個 stream 會越來越多 : 但是不懂這是啥意義?有各位前輩可以解答嗎,非常感謝 <0> 這、、 你去 google 一下 mysql.sock 是作什麼的,或者找位 DBA 人員問問也可。 : 另外也有找到資料是 httpd 開啟兩個服務讓 mysql loading 太大 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^? : ps aux | grep httpd 我也有試著下版友給我的建議這個指令 這指令以及 ps aux | grep httpd | wc -l 的執行結果為? : cat /var/log/httpd-access.log 11:45 : 除了以上這個以外,還會跑出一堆在 : 帳號/底下的 log log 內容大約像是什麼? -- 靜中見真境,淡中識本然 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.108.147