[20210622]logrotate清除oracle aud檔案的問題.txt

lfree發表於2021-06-22

[20210622]logrotate清除oracle aud檔案的問題.txt

--//生產系統昨天出現/u01磁碟空間不足的情況,清理出40g磁碟空間後,檢查日誌應用同事發現有點慢,主要這臺機器還執行ogg.
--//感覺有點慢是正常的.另外檢查發現存在大量logrotate程式以及後續awk命令程式.會不會是這些程式導致的緩慢.

--//我先清除這些程式.
# service crond stop
# ps -ef | grep logrotate
# pkill -9 logrotate
# pkill -9 awk
# service crond start

--//看看我寫的logrotate配置:
# cat /etc/logrotate.d/oracle
/u01/app/oracle/diag/tnslsnr/dbcndg2/listener/trace/listener.log {
    weekly
    rotate 5
    copytruncate
    compress
    notifempty
    missingok
}

/u01/app/oracle/admin/dbcndg2/adump/dbcndg2_ora_*.aud
{
    monthly
    rotate 0
    notifempty
    missingok
    maxage 32
    postrotate
      find /u01/app/oracle/admin/dbcndg2/adump/  -name "dbcndg_ora_*.aud" -size 0 -exec rm  {} \+
    endscript
}
--//我一下子沒想明白為什麼我要執行find ... -size 0 這樣的操作.
--//看以前的工作筆記,其實開始並沒有postrotate...endscript,我才突然想明白以前也出現類似磁碟滿這樣的情況下.
--//這樣就會出現大量size=0 的aud檔案,估計當時就是為了這樣的情況設計的,清除size=0的aud檔案.

--//為什麼慢呢? 實際上這個問題我以前遇到過,管理的機器實在太多,遺漏一些機器要改.只不過當時僅僅做了記錄,並沒有發表出來.
--//11g下改變了aud的檔案命名格式加入時間戳,這樣每個生成的檔案是唯一的,這樣logrotate的state file(預設是
--///var/lib/logrotate.status)會越滾越大.這樣每次執行越來越慢.10g下沒有時間戳,也就是最大65XXX個檔案(雖然可能也很慢,但至
--//少這是一個定數,另外好像最大程式號linux現在也可以修改,可以設定更大不止65XXX,我沒有這方面的經驗以及測試).

--//檢查 /var/lib/logrotate.status已經達到129M.清除檔案.
# >| /var/lib/logrotate.status

--//另外檢查:
# ls -ltrh
total 108M
drwxr-xr-x 2 oracle oinstall 4.0K 2015-03-16 17:34:35 dpdump
drwxr-xr-x 2 oracle oinstall 4.0K 2015-03-16 17:34:43 hdump
drwxr-xr-x 2 oracle oinstall 4.0K 2015-03-16 17:34:49 pfile
drwxr-xr-x 2 oracle oinstall 107M 2021-06-22 10:14:06 adump

--//看看adump目錄大小107M,就知道即使清除了/var/lib/logrotate.status檔案,也是不可能完成的操作.
--//如果你使用如下命令除錯也可以發現執行很慢.
logrotate -dv /etc/logrotate.d/oracle

--//為什麼adump目錄佔用空間這個大呢?
$ mv adump adump.xxx
$ mkdir adump
$ cd adump
--//等上一小會,發現每分鐘基本發起10個連線.我估計不知道那個變態公司開發的無聊的監測軟體.我感覺對方的開發不會寫程式,
--//完全可以連上不斷開連線,每次執行語句前監測連線是否正常就ok了.
--//這樣admup目錄達到這個數量級別就很正常了.
--//1個月產生 24*60*10*30 = 432000個檔案.
--// 107*1024*1024/432000 = 259.71,每個檔案在目錄佔用25X位元組?,不熟悉也沒有看過linux的目錄結構.先放一下.

--//也就是我不能再使用logrotate清除oracle aud檔案的方式來維護資料庫aud日誌,要麼使用find+cron的方式,要麼使用連結
--//http://blog.itpub.net/267265/viewspace-2139283/=>[20170518]11G審計日誌清除3.txt

--//我有一些伺服器已經採用find+cron方式,有機會再整理把,先註解如下內容:
# /u01/app/oracle/admin/dbcndg2/adump/dbcndg2_ora_*.aud
# {
#     monthly
#     rotate 0
#     notifempty
#     missingok
#     maxage 32
#     postrotate
#       find /u01/app/oracle/admin/dbcndg2/adump/  -name "dbcndg_ora_*.aud" -size 0 -exec rm  {} \+
#     endscript
# }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2777877/,如需轉載,請註明出處,否則將追究法律責任。

相關文章