centos7 systemctl status servicename执行慢的问题
一,這個(gè)問題和systemd-journald有關(guān),故我們先簡(jiǎn)單了解下:
????過去只有 rsyslogd 的年代中,由于 rsyslogd 必須要開機(jī)完成并且執(zhí)行了 rsyslogd 這個(gè) daemon 之后,登錄文件才會(huì)開始記錄。所以,核心還得要自己產(chǎn)生一個(gè) klogd 的服務(wù), 才能將系統(tǒng)在開機(jī)過程、啟動(dòng)服務(wù)的過程中的信息記錄下來,然后等 rsyslogd 啟動(dòng)后才傳送給它來處理。
????現(xiàn)在有了 systemd 之后,systemd 使用systemd-journald統(tǒng)一管理所有 Unit 的啟動(dòng)日志。由于systemd是kernel喚醒的,然后又是第一個(gè)執(zhí)行的軟件,它可以主動(dòng)調(diào)用 systemd-journald 來協(xié)助記載登錄信息。因此在開機(jī)過程中的所有信息,包括啟動(dòng)服務(wù)與服務(wù)若啟動(dòng)失敗的情況等等,都可以直接被記錄到 systemd-journald 里頭去!
????不過 systemd-journald 由于是使用于內(nèi)存的登錄文件記錄方式,因此重新開機(jī)過后,開機(jī)前的登錄文件信息當(dāng)然就不會(huì)被記載了。 為此,我們還是建議啟動(dòng) rsyslogd 來協(xié)助分類記錄!也就是說, systemd-journald 用來管理與查詢這次開機(jī)后的登錄信息,而 rsyslogd 可以用來記錄以前及現(xiàn)在的所以數(shù)據(jù)到磁盤文件中,方便未來進(jìn)行查詢!
二,問題場(chǎng)景:
一臺(tái)centos7系統(tǒng)有l(wèi)oad高的報(bào)警,故登錄上去查看,發(fā)現(xiàn)系統(tǒng)很卡,系統(tǒng)磁盤io吃的比較多。之后,發(fā)現(xiàn)很多systemctl status的進(jìn)程,并且這種進(jìn)程占用系統(tǒng)io很多。??
問題分析定位:
1,centos7的bug
2,systemctl的問題??
三,解決過程:
1,centos7已經(jīng)用了很長(zhǎng)時(shí)間,目前處于穩(wěn)定,并且翻看centos7的bug list未發(fā)現(xiàn)有類似異常。故排除了系統(tǒng)bug。
2,開始查找systemctl的問題,果不其然發(fā)現(xiàn)是systemd-journald的問題。
1)strace命令查看問題,發(fā)現(xiàn)是讀取systemd-journald日志比較慢
# strace -s 1024 systemctl status nginx
2)查看status輸出:
# systemctl status nginx
● nginx.service - nginx - high performance web server
? ?Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
? ?Active: active (running) since 一 2018-01-08 18:25:37 CST; 2h 20min ago
? ? ?Docs: http://nginx.org/en/docs/
?Main PID: 22403 (nginx)
? ?CGroup: /system.slice/nginx.service
? ? ? ? ? ?├─22403 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
? ? ? ? ? ?├─22404 nginx: worker process
? ? ? ? ? ?├─22405 nginx: worker process
? ? ? ? ? ?├─22408 nginx: worker process
1月 08 18:25:37 test systemd[1]: Starting nginx - high performance web server...
1月 08 18:25:37 test nginx[22398]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
1月 08 18:25:37 test nginx[22398]: nginx: configuration file /etc/nginx/nginx.conf test is successful
1月 08 18:25:37 test systemd[1]: Started nginx - high performance web server.
可以看到systemctl有的輸出有nginx啟動(dòng)時(shí)候相關(guān)的信息。而這些輸出是從systemd-journald中讀取的。
3)systemd-journald的日志默認(rèn)是存儲(chǔ)在/run/log/journal目錄,發(fā)現(xiàn)這個(gè)目錄已經(jīng)有4G了。查看網(wǎng)上相關(guān)資料,發(fā)現(xiàn)也有其它人遇見過類似的問題。可以通過修改systemd-journald的配置來解決問題:
# vim /etc/systemd/journald.conf
SystemMaxUse=100M
RuntimeMaxUse=100M
###
SystemMaxUse= 與 RuntimeMaxUse= 限制全部日志文件加在一起最多可以占用多少空間。而SystemMaxUse= 與 RuntimeMaxUse= 的默認(rèn)值是10%空間與4G空間兩者中的較小者,故把這兩個(gè)配置調(diào)小了。
重啟systemd-journald:
#?systemctl restart systemd-journald
4)操作完成之后發(fā)現(xiàn)系統(tǒng)load慢慢降了下來,systemctl status命令也變快了。
四,結(jié)論:
1,通過限制systemd-journald日志的大小來解決這個(gè)問題。副作用是保存的日志變少,但是可接受,目前沒有發(fā)現(xiàn)有異常。
五,參考:
http://shouce.jb51.net/vbird-linux-basic-4/160.html
http://www.jinbuguo.com/systemd/journald.conf.html
http://www.codekoala.com/posts/systemctl-status-foo-was-too-slow/
本文轉(zhuǎn)自 leejia1989 51CTO博客,原文鏈接:http://blog.51cto.com/leejia/2058797,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的centos7 systemctl status servicename执行慢的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Golang cgo编程 [] stri
- 下一篇: OScached页面缓存的入门使用