【乾貨】Linux運維常見問題及解決的32個錦囊妙計

2021-02-15 廈門微思網絡

作為linux運維,多多少少會碰見這樣那樣的問題或故障,從中總結經驗,查找問題,匯總並分析故障的原因,這是一個Linux運維工程師良好的習慣。每一次技術的突破,都經歷著苦悶,伴隨著快樂,可我們還是執著的繼續努力,從中也積累了更多的經驗,這就是實踐給予我們的豐厚回報。

下面匯總了我做項目過程可能出現的故障及解決方法,看看是否與你有共鳴,並對你有幫助?

1.shell腳本不執行

問題
某天研發某同事找我說幫他看看他寫的shell腳本,死活不執行,報錯。我看了下,腳本很簡單,也沒有常規性的錯誤,報「:badinterpreter:Nosuchfileordirectory」錯。

看這錯,我就問他是不是在windows下編寫的腳本,然後在上傳到linux伺服器的……果然。

原因
在DOS/windows裡,文本文件的換行符為rn,而在nix系統裡則為n,所以DOS/Windows裡編輯過的文本文件到了nix裡,每一行都多了個^M。

解決
1)重新在linux下編寫腳本;
2)vi:%s/r//g:%s/^M//g(^M輸入用Ctrl+v,Ctrl+m)
附:sh-x腳本文件名,可以單步執行並回顯結果,有助於排查複雜腳本問題。

2.crontab輸出結果控制

問題
/var/spool/clientmqueue目錄佔用空間超過100G

原因
cron中執行的程序有輸出內容,輸出內容會以郵件形式發給cron的用戶,而sendmail沒有啟動所以就產生了/var/spool/clientmqueue目錄下的那些文件,日積月累可能撐破磁碟。

解決
1)直接手動刪除:ls|xargsrm-f;
2)徹底解決:在cron的自動執行語句後加上>/dev/2>&1

3.telnet很慢/ssh很慢

問題
某天研發某同事說10.50訪問10.52memcached服務異常,讓我們檢查下看網絡/服務/系統是否有異常。檢查發現系統正常,服務正常,10.50ping10.52也正常,但10.50telnet10.52很慢。同時發現該機器的namesever是不起作用的。

原因
becauseyourPCdoesn’tdoareverseDNSlookuponyourIPthen…whenyoutelnet/ftpintoyourlinuxbox,it』lldoadnslookuponyou。

解決
1)修改/etc/hosts使hostname和ip對應;
2)在/etc/resolv.conf注釋掉nameserver或者找一個「活的」nameserver。

4.Read-onlyfilesystem

問題
同事在mysql裡建表建不成功,提示如下:
mysql>createtablewosontest(colddname1char(1));
ERROR1005(HY000):Can’t create table『wosontest』(errno:30)
經檢查mysql用戶權限以及相關目錄權限沒問題;用perror30提示信息為:OSerrorcode30:Read-onlyfilesystem

可能原因
1)文件系統損壞;
2)磁碟又壞道;
3)fstab文件配置錯誤,如分區格式錯誤錯誤(將ntfs寫成了fat)、配置指令拼寫錯誤等。

解決
1)由於是測試機,重啟機器後恢復;
2)網上說用mount可解決。

5.文件刪了磁碟空間沒釋放

問題
某天發現某臺機器df-h已用磁碟空間為90G,而du-sh/*顯示所有使用空間加起來才30G,囧。

原因
可能某人直接用rm刪除某個正在寫的文件,導致文件刪了但磁碟空間沒釋放的問題

解決
1)最簡單重啟系統或者重啟相關服務。
2)幹掉進程

/usr/sbin/lsof|grepdeleted
  ora25575data33uREG65,654294983680/oradata/DATAPRE/UNDOTBS009.dbf(deleted)

從lsof的輸出中,我們可以發現pid為25575的進程持有著以文件描述號(fd)為33打開的文件/oradata/DATAPRE/UNDOTBS009.dbf。

在我們找到了這個文件之後可以通過結束進程的方式來釋放被佔用的空間:echo>/proc/25575/fd/33
3)刪除正在寫的文件一般用cat/dev/null>file

6.find文件提升性能

問題
在tmp目錄下有大量包含picture_*的臨時文件,每天晚上2:30對一天前的文件進行清理。之前在crontab下跑如下腳本,但是發現腳本效率很低,每次執行時負載猛漲,影響到其他服務。
#!/bin/sh
find/tmp-name「picture_*」-mtime+1-execrm-f{};

原因
目錄下有大量文件,用find很耗資源。

解決

#!/bin/sh
cd/tmp
time=`date-d「2dayago」「+%b%d」`
ls-l|grep「picture」|grep「$time」|awk『{print$NF}』|xargsrm-rf

7.獲取不了網關mac地址

問題
從2.14到3.65(映射地址2.141)網絡不通,但是從3端的其他機器到3.65網絡OK。

原因

#arp
AddressHWtypeHWaddressFlagsMaskIface
192.168.3.254etherincompletCMbond0
表面現象是機器自動獲取不了網關MAC地址,網絡工程師說是網絡設備的問題,具體不清。

解決
arp綁定,arp-ibond0-s192.168.3.25400:00:5e:00:01:64

8.http服務無法啟動一例

問題

某天研發某同事說網站前端環境http無法啟動,我上去看了下。報如下錯:

/etc/init.d/httpdstart
Startinghttpd:[SatJan2917:49:002011][warn]moduleantibot_moduleisalreadyloaded,skipping
Useproxyforwardasremoteip:true.
Antibotexcludepattern:.*.[(js|css|jpg|gif|png)]
Antibotseedcheckpattern:login
(98)Addressalreadyinuse:make_sock:couldnotbindtoaddress[::]:7080
(98)Addressalreadyinuse:make_sock:couldnotbindtoaddress0.0.0.0:7080
nolisteningsocketsavailable,shuttingdown
Unabletoopenlog[FAILED]

原因

1)埠被佔用:表面看是7080埠被佔用,於是netstat-npl|grep7080看了下發現7080沒有佔用;
2)在配置文件中重複寫了埠,如果在以下兩個文件同時寫了Listen7080

/etc/httpd/conf/http.conf
/etc/httpd/conf.d/t.10086.cn.conf

解決
注釋掉/etc/httpd/conf.d/t.10086.cn.conf的Listen7080,重啟,OK。

9.toomanyopenfile

問題
報toomanyopenfile錯誤

解決
終極解決方案

echo「」>>/etc/security/limits.conf
echo「*softnproc65535″>>/etc/security/limits.conf
echo「*hardnproc65535″>>/etc/security/limits.conf
echo「*softnofile65535″>>/etc/security/limits.conf
echo「*hardnofile65535″>>/etc/security/limits.conf
echo「」>>/root/.bash_profile
echo「ulimit-n65535″>>/root/.bash_profile
echo「ulimit-u65535″>>/root/.bash_profile

最後重啟機器或者執行:

ulimit-u655345&&ulimit-n65535

10.ibdata1和mysql-bin致磁碟空間問題

問題
2.51磁碟空間報警,經查發現ibdata1和mysql-bin日誌佔用空間太多(其中ibdata1超過120G,mysql-bin超過80G)

原因
bdata1是存儲格式,在INNODB類型數據狀態下,ibdata1用來存儲文件的數據和索引,而庫名的文件夾裡的那些表文件只是結構而已。

innodb存儲引擎有兩種表空間的管理方式,分別是:
1)共享表空間(可拆分為多個小的表空間文件),這個是我們目前多數資料庫使用的方法;
2)獨立表空間,每一個表有一個獨立的表空間(磁碟文件)

對於兩種管理方式,各有優劣,具體如下:
①共享表空間:
優點
可以將表空間分成多個文件存放到不同的磁碟上(表空間文件大小不受表大小的限制,一個表可以分布在不同步的文件上)

缺點
所有數據和索引存放在一個文件中,則隨著數據的增加,將會有一個很大的文件,雖然可以把一個大文件分成多個小文件,但是多個表及索引在表空間中混合存儲,這樣如果對於一個表做了大量刪除操作後表空間中將有大量空隙。

對於共享表空間管理的方式下,一旦表空間被分配,就不能再回縮了。當出現臨時建索引或是創建一個臨時表的操作表空間擴大後,就是刪除相關的表也沒辦法回縮那部分空間了。

②獨立表空間:
在配置文件(my.cnf)中設置:innodb_file_per_table

特點
每個表都有自已獨立的表空間;每個表的數據和索引都會存在自已的表空間中。

優點
表空間對應的磁碟空間可以被收回(Droptable操作自動回收表空間,如果對於刪除大量數據後的表可以通過:altertabletbl_nameengine=innodb;回縮不用的空間。

缺點
如果單表增加過大,如超過100G,性能也會受到影響。在這種情況下,如果使用共享表空間可以把文件分開,但有同樣有一個問題,如果訪問的範圍過大同樣會訪問多個文件,一樣會比較慢。

如果使用獨立表空間,可以考慮使用分區表的方法,在一定程度上緩解問題。此外,當啟用獨立表空間模式時,需要合理調整innodb_open_files參數的設置。

解決:
1)ibdata1數據太大:只能通過dump,導出建庫的sql語句,再重建的方法。
2)mysql-binLog太大:

①手動刪除:
刪除某個日誌:mysql>PURGEMASTERLOGSTO『mysql-bin.010′;
刪除某天前的日誌:mysql>PURGEMASTERLOGSBEFORE』2010-12-2213:00:00′;
②在/etc/my.cnf裡設置只保存N天的bin-log日誌
expire_logs_days=30//BinaryLog自動刪除的天數

出了故障怎麼辦?如何實現 0 迭機運維,9月15日來微思參加《IT日常運維之道》免費技術沙龍, 中郵物流運維主管-鍾宏偉分享日常運維怎麼才能做到0宕機!

相關焦點

  • 32 個運維常見故障處理技巧,統統幫你解決掉!
    作為linux運維,多多少少會碰見這樣那樣的問題或故障,從中總結經驗
  • Linux運維遇到的基本問題解決大全
    一、運維概述與系統安裝問題1:虛擬機提示"Intel VT-x處于禁用狀態實現思路:重啟電腦按快捷鍵進入BIOS —> 啟用Intel VT-x —> 重啟計算機 —> 啟動虛擬機一般品牌的筆記本電腦包括聯想
  • Linux運維工程師真實的工作狀態到底是怎麼樣的?
    現在的運維工程師在大家眼中是個什麼樣子呢?
  • 運維常見的22個故障排查和10個問題解決技巧大匯總!
    作為運維,多多少少會碰見這樣那樣的問題或故障,從中總結經驗,查找問題,匯總並分析故障的原因,這是一個運維工程師良好的習慣。
  • IT運維工程師們為什麼選擇使用Linux系統
    linux自誕生之日起,便受到了全世界優秀黑客程式設計師們的百般寵愛與關注。曾經,linux似乎離我們非常遙遠;而現在,越來越多的人聽說了linux,會去討論linux發行版,會去關注linux內核。而程式設計師們更是熱衷於使用linux,在linux開發。
  • Linux系統運維工程師入門絕招放送
    運維是幹嘛的?安裝伺服器系統?重裝系統再裝系統?背鍋的?我就稀裡糊塗的,這樣報著必死的決心,考下RHCE認證,走上了Linux運維的道路,成為了一名linux運維工程師。有些心得跟大家分享下,避免小白多走冤路。Linux運維必須要掌握的工具,我列出這幾方面,這樣的話入門就基本沒問題。
  • 如何快速成為一名Linux運維工程師
    這裡羅列一些必須掌握的知識:1、了解Linux FHS,這是Linux的體系結構,明白大致原理2、重複 60 個常用Linux基礎、命令,掛載3、TCP/IP協議,網絡配置相關知識4、SSH原理及應用5、防火牆的基本配置,iptables在Linux下面掌握一些初級工具、技能是非常有必要的:1、Vim編輯器,無論對於寫配置文件
  • 年薪50萬的運維工程師學習成長路線
    最近看到了一篇新聞,linux之父建議找一份基於linux和開源環境的工作,確實,這已經是未來的大趨勢了。今天就來聊一聊我的想法,本人8年linux運維一線經驗,呆過很多網際網路公司,從一線運維做到運維架構師一職,也見證了中國運維行業從無人問津到可圈可點的整個演變過程。
  • Linux下33個常用的Find實例
    純手工打造每一篇開源資訊與技術乾貨,數十萬程式設計師和
  • 雖然我是醫生,但是我愛上了linux運維工作
    雖然我是醫生,但是我愛上了linux運維工作。我一開始以為是Windows下的dos界面,詳細詢問後才知道是linux的字符界面。後來他跟我談了很多關於他學習linux的心得,看他眉宇之間的幸福,我知道這是我想要的狀態!
  • 「必看」Linux 運維工程師打怪升級篇
    做運維就像遊戲打怪升級,升級後知識體系和運維體系也相對變化挺大,學習了很多新的知識點。運維工程師是從一個呆逼進化為苦逼再成長為牛逼的過程,前提在於你要能忍能幹能拼,還要具有敏銳的嗅覺感知前方潮流變化。如:今年大數據,人工智慧比較火。。。
  • 親愛的,我是一條Linux運維技術學習路徑呀!
    總而言之,幹什麼都是好的;但要幹出個樣子來,這才是人的價值和尊嚴所在。 ——王小波我是一條Linux運維技術學習路徑。在跟我相處的每個階段,都包含詳細的教程、練習項目等;首先學習Linux相關的基本操作和系統管理,然後依次學習並實踐服務部署、資料庫管理、腳本編程、系統監控和安全防護、以及Web服務運維技術。
  • Linux 下重要文件被刪除?我有妙招
    誤刪除linux系統文件了?不用急,本文將給你一個恢復linux文件的方法,讓你輕鬆應對運維中的各種風險問題。
  • MLSBS v0.21RC,Linux 一鍵運維腳本(新增腳本加密)
    #MLSBS v0.21rcMLSBS is the abbreviation of "My linux's「MLSBS」是「My linux's bash script」的縮寫linux運維技術人員日常需要寫一堆腳本來簡化工作量。「MLSBS」的目的就是把我日常在linux下的工作通過腳本整合到一個項目中,需要的時候幾個點擊就可以完成任務了。
  • c定時 linux專題及常見問題 - CSDN
    /bin/shwhile true do uptime sleep 2 done1.2 linux系統crond的定時任務(1)linux系統自身定期執行的任務操作,如輪詢系統日誌、備份系統數據、清理系統緩存等,這些任務無需我們人為幹預。
  • Linux運維跳槽面試精華題|第三集
    運維工程師在公司當中責任重大,需要保證時刻為公司及客戶提供最高、最快、最穩定、最安全的服務運維工程師的一個小小的失誤,很有可能會對公司及客戶造成重大損失因此運維工程師的工作需要嚴謹及富有創新精神26、實時抓取並顯示當前系統中tcp 80埠的網絡數據信息,請寫出完整操作命令27、伺服器開不了機怎麼解決一步步的排查
  • 幾個常見而嚴重的 MySQL 問題分析 | 運維進階
    很多時候發生資料庫報錯時,不一定就是資料庫的問題,不一定非得急著呼叫資料庫人員解決。我們要形成這樣一種意識,我們不只是寫應用的,我們是寫金融系統的,我們理應具備一定的問題排查解決能力。本文將抽取幾個常見而嚴重的MySQL問題進行分析,並給出深度解答。藉以大家幫助思考。
  • 2018 掌握好這幾點方法學習Linux,一定比別人更快入門運維!
    當一人第一次聽說Linux並躍躍欲試的時候,總會提出幾個?它是什麼(What)? 為什麼要用它(Why)? 怎樣學習它(How)?,在安裝或使用linux的過程中遇到一個具體的問題就開始提問,很多都是重複性的問題,甚至有不少人連基本的問題描述都不是很清楚。
  • 深度好文:全面解析 Linux Load
    job主要是一個shell概念,和進程組概念近似,這裡應該屬於用詞不當(後面會分析,準確的用詞應該是內核中的tasks或用戶空間中的threads概念)。而且只包含state狀態為R和D的兩種jobs,其他state狀態不包含在內。
  • CentOS8.1 Linux網絡配置nmcli-Linux系統運維實戰系列五
    Linux系統運維實戰系列五CentOS 8/RHEL 8 Linux系統運維實戰系列原創持續更新中......請關注,不迷路!使用nmcli命令行工具配置網絡1)查看NetworkManager服務狀態,OK沒有問題 ,可以開始nmcli2)查看系統可用網卡設備:一個網卡設備同時只能應用一個網絡配置文件,但是必須得有一個。