無論對Spark集群,還是Hadoop集群等大數據相關的集群進行調優,對linux系統層面的調優都是必不可少的,這里主要介紹3種常用的調優:
1.linux文件句柄
linux在整個系統層面和單個進程兩個層面對打開的文件句柄進行限制。
配置文件/proc/sys/fs/file-max是對整個系統層面對打開的文件句柄最大數進行控制,單個用戶或進程能夠打開的文件句柄數受此限制。
通過ulimit -a查看當前用戶或進程能夠打開的最大文件數:
上述只是默認值,在實際生產環境肯定是不夠用的,如果配置過小,有時會報類似can't open so many files的錯誤。通過ulimit -n可以對該值進行臨時修改。
如果想永久生效,需要修改配置文件/etc/security/limits.conf,如soft nofile 10000、hard nofile 10000追加到配置文件中。
2.單個用戶最大進程數
上圖中max user processes就是單個用戶最大進程數的限制,通過ulimit -u可以臨時修改。永久修改需要追加,如soft nproc 10000、hard nproc 10000到/etc/security/limits.conf文件中
3.swap分區
又被稱為交換分區,占用的是磁盤空間。操作系統可以將一部分數據存於swap分區中,從而為當前運行的程序騰出足夠的內存空間。但因為數據存於磁盤,性能會相對內存低,尤其是讀寫頻繁的情緒,IO消耗會更大。
合理設置swap分區大小,比如設置為0,優先使用物理內存。設置方式echo vm.swappiness=0 >> /etc/sysctl.conf。
針對不同系統、用戶需要修改的文件可能有所不同,比如對於普通用戶最大打開進程限制配置文件/etc/security/limits.d/20-nproc.conf。
除了上述常見的3種調優,還有控制每個端口監聽隊列的最大長度等調優方式,這里不再贅述。
關於軟限制和硬限制的補充:
上文中,soft是軟限制,hard是硬限制。
軟限制(soft limit):內核實際執行的限制,任何進程都可以將軟限制設置為小於或等於對進程限制的硬限制的值、最大線程數和文件數。
硬限制(hard limit):可以在任何時候任何進程中設置,但硬限制需要由超級用戶修改。
linux常見面試題
1.linux系統中獲取pid為100的進程所監聽的tcp端口號
netstat -npta | grep 100
2.查找/home目錄下大小為10k的文件
find /home -size 10K
3.在當前目錄中的Main.java中關鍵字keywords出現位置,並將結果追加到main.txt中find . -name Main.java | xargs grep -n "keywords" >> main.txt
【xargs將前一個命令的輸出作為后一個命令的參數】
4.壓縮文件夾testDir為testDir.tar.gz
tar -zcvf testDir.tar.gz testDir/
5.解壓縮文件testDir.tar.gz到路徑/home/user中
tar -zxvf testDir.tar.gz -C /home/user
6.查看磁盤使用情況
df -h
7.查看內存使用情況
free -mt
8.改變當前路徑下testDir及其下面所有文件和目錄的所有者為tom,組為group-t
chown -R tom:group-t ./testDir
9.賦予testDir權限為rwxr-xr-x
chmod 755 testDir
10.查看文件app.log,從第3000行開始,顯示1000行,即顯示3000-3999行
cat app.log | tail -n +3000 | head -n 1000
11.查看文件app.log,顯示1000行到3000行
cat app.log | head -n 3000 | tail -n +1000
12.統計當前文件夾下的app目錄下,js文件數量ll ./app | grep "^-" | grep js | wc -l
^-:正則表達式,匹配文件
關注微信公眾號:大數據學習與分享,獲取更對技術干貨