linux運維工程師面試題總結(一)
1為什麼要有swap分割槽?工作原理是什麼?
Linux核心為了提高讀寫效率與速度,會將檔案在記憶體中進行快取,這部分記憶體就是Cache Memory(快取記憶體)。即使你的程式執行結束後,Cache Memory也不會自動釋放。這就會導致你在Linux系統中程式頻繁讀寫檔案後,你會發現可用實體記憶體變少。當系統的實體記憶體不夠用的時候,就需要將實體記憶體中的一部分空間釋放出來,以供當前執行的程式使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程式,這些被釋放的空間被臨時儲存到Swap空間中,等到那些程式要執行時,再從Swap分割槽中恢復儲存的資料到記憶體中。這樣,系統總是在實體記憶體不夠時,才進行Swap交換。
2.多執行緒和多程序的區別,喜歡用哪個?為什麼?
(思路:先對比執行緒和程序的優缺點,再結合具體場景介紹,不同場景下喜歡用不同方法。)
程序是資源分配的最小單位,執行緒是CPU排程的最小單位。
我們按照多個不同的維度,來看看多執行緒和多程序的對比(注:因為是感性的比較,因此都是相對的,不是說一個好得不得了,另外一個差的無法忍受)。
對比維度 |
多程序 |
多執行緒 |
總結 |
資料共享、同步 |
資料共享複雜,需要用IPC;資料是分開的,同步簡單 |
因為共享程序資料,資料共享簡單,但也是因為這個原因導致同步複雜 |
各有優勢 |
記憶體、CPU |
佔用記憶體多,切換複雜,CPU利用率低 |
佔用記憶體少,切換簡單,CPU利用率高 |
執行緒佔優 |
建立銷燬、切換 |
建立銷燬、切換複雜,速度慢 |
建立銷燬、切換簡單,速度很快 |
執行緒佔優 |
程式設計、除錯 |
程式設計簡單,除錯簡單 |
程式設計複雜,除錯複雜 |
程序佔優 |
可靠性 |
程序間不會互相影響 |
一個執行緒掛掉將導致整個程序掛掉 |
程序佔優 |
分散式 |
適應於多核、多機分散式;如果一臺機器不夠,擴充套件到多臺機器比較簡單 |
適應於多核分散式 |
程序佔優 |
1)需要頻繁建立銷燬的優先用執行緒
原因請看上面的對比。
這種原則最常見的應用就是Web伺服器了,來一個連線建立一個執行緒,斷了就銷燬執行緒,要是用程序,建立和銷燬的代價是很難承受的
2)需要進行大量計算的優先使用執行緒
所謂大量計算,當然就是要耗費很多CPU,切換頻繁了,這種情況下執行緒是最合適的。
這種原則最常見的是影象處理、演算法處理。
3)強相關的處理用執行緒,弱相關的處理用程序
什麼叫強相關、弱相關?理論上很難定義,給個簡單的例子就明白了。
一般的Server需要完成如下任務:訊息收發、訊息處理。“訊息收發”和“訊息處理”就是弱相關的任務,而“訊息處理”裡面可能又分為“訊息解碼”、“業務處理”,這兩個任務相對來說相關性就要強多了。因此“訊息收發”和“訊息處理”可以分程序設計,“訊息解碼”、“業務處理”可以分執行緒設計。
當然這種劃分方式不是一成不變的,也可以根據實際情況進行調整。
4)可能要擴充套件到多機分佈的用程序,多核分佈的用執行緒
原因請看上面對比。
5)都滿足需求的情況下,用你最熟悉、最拿手的方式
至於“資料共享、同步”、“程式設計、除錯”、“可靠性”這幾個維度的所謂的“複雜、簡單”應該怎麼取捨,我只能說:沒有明確的選擇方法。但我可以告訴你一個選擇原則:如果多程序和多執行緒都能夠滿足要求,那麼選擇你最熟悉、最拿手的那個。
3./etc/sysctl.conf 這個檔案的意義?列舉一些常見的kernel引數和作用?
/etc/sysctl.conf這個目錄主要是配置一些系統資訊,而且它的內容全部是對應於/proc/sys/這個目錄的子目錄及檔案。
(1)shmmax:該引數定義了共享記憶體段的最大尺寸(以位元組為單位)。預設為32M,對於oracle來說,該預設值太低了,通常將其設定為2G。
(2)shmmni:這個核心引數用於設定系統範圍內共享記憶體段的最大數量。該引數的預設值是 4096 。通常不需要更改。
(3)shmall:該引數表示系統一次可以使用的共享記憶體總量(以頁為單位)。預設值就是2097152,通常不需要修改。
(4)sem:該引數表示設定的訊號量。
(5)file-max:該引數表示檔案控制代碼的最大數量。檔案控制代碼設定表示在linux系統中可以開啟的檔案數量。
4.nginx的應用場景?
nginx應用場景概括
1、http伺服器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態伺服器。 2、虛擬主機。可以實現在一臺伺服器虛擬出多個網站,例如個人網站使用的虛擬機器。 3、反向代理,負載均衡。當網站的訪問量達到一定程度後,單臺伺服器不能滿足使用者的請求時,需要用多臺伺服器叢集可以使用nginx做反向代理。並且多臺伺服器可以平均分擔負載,不會應為某臺伺服器負載高宕機而某臺伺服器閒置的情況。5.lvs腦裂如何解決,為什麼會產生雙master?雙master時vip通不通?
連結:https://www.zhihu.com/question/50997425/answer/136178424
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
- 可以採用第三方仲裁的方法。由於keepalived體系中主備兩臺機器所處的狀態與對方有關。如果主備機器之間的通訊出了網題,就會發生腦裂,此時keepalived體系中會出現雙主的情況,產生資源競爭。
- 一般可以引入仲裁來解決這個問題,即每個節點必須判斷自身的狀態。最簡單的一種操作方法是,在主備的keepalived的配置檔案中增加check配置,伺服器週期性地ping一下閘道器,如果ping不通則認為自身有問題 。
- 最容易的是藉助keepalived提供的vrrp_script及track_script實現。如下所示。
global_defs {
router_id LVS_DEVEL
}
vrrp_sync_group VG_1 {
group {
VI_1
}
notify_master /root/slave2master.py
notify_backup /root/master2slave.py
}
vrrp_instance VI_1 {
vrrp_unicast_bind 192.168.150.21
vrrp_unicast_peer 192.168.150.20
state BACKUP
interface manbr
virtual_router_id 51
nopreempt
priority 100
advert_int 10
authentication {
auth_type PASS
auth_pass XXXX
}
virtual_ipaddress {
192.168.150.23 dev manbr
}
}
增加仲裁的配置:global_defs {
router_id LVS_DEVEL
}
track_script {
check_local
}
vrrp_script check_local {
script "/root/check_gateway.sh"
interval 5
}
vrrp_sync_group VG_1 {
group {
VI_1
}
notify_master /root/slave2master.py
notify_backup /root/master2slave.py
}
vrrp_instance VI_1 {
vrrp_unicast_bind 192.168.150.21
vrrp_unicast_peer 192.168.150.20
state BACKUP
interface manbr
virtual_router_id 51
nopreempt
priority 100
advert_int 10
authentication {
auth_type PASS
auth_pass XXXX
}
virtual_ipaddress {
192.168.150.23 dev manbr
}
}
check_gateway.sh 就是我們的仲裁邏輯,發現ping不通閘道器,則關閉keepalived service keepalived stop。
該方法在伺服器通訊正常之後無法再將keepalived啟動起來
注:此文為轉載文章,如有侵權,請及時說明。