1. 程式人生 > >linux運維工程師面試題總結(一)

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
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

  1. 可以採用第三方仲裁的方法。由於keepalived體系中主備兩臺機器所處的狀態與對方有關。如果主備機器之間的通訊出了網題,就會發生腦裂,此時keepalived體系中會出現雙主的情況,產生資源競爭。
  2. 一般可以引入仲裁來解決這個問題,即每個節點必須判斷自身的狀態。最簡單的一種操作方法是,在主備的keepalived的配置檔案中增加check配置,伺服器週期性地ping一下閘道器,如果ping不通則認為自身有問題 。
  3. 最容易的是藉助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啟動起來

     注:此文為轉載文章,如有侵權,請及時說明。