RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux之性能優(yōu)化

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2024-12-06 10:15 ? 次閱讀

一、優(yōu)化內(nèi)核相關(guān)參數(shù)

配置文件/etc/sysctl.conf
配置方法直接將參數(shù)添加進(jìn)文件每條一行

sysctl -a 可以查看默認(rèn)配置
sysctl -p 執(zhí)行并檢測(cè)是否有錯(cuò)誤

1、網(wǎng)絡(luò)相關(guān)

net.core.somaxconn=65535
一個(gè)端口最大監(jiān)聽(tīng)TCP連接隊(duì)列的長(zhǎng)度

net.core.netdev_max_backlog=65535
數(shù)據(jù)包速率比內(nèi)核處理快時(shí),送到隊(duì)列的數(shù)據(jù)包上限

net.ipv4.tcp_max_syn_backlog=65535
TCP syn 隊(duì)列的最大長(zhǎng)度, 第一次握手的連接參數(shù)過(guò)大可能也會(huì)遭受syn flood攻擊

net.ipv4.tcp_fin_timeout=10
fin超時(shí)時(shí)間,表示如果套接字由本端要求關(guān)閉,這個(gè)參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時(shí)間

net.ipv4.tcp_tw_reuse=1
是否允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0 關(guān)閉

net.ipv4.tcp_tw_recycle=1
是否開(kāi)啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0 關(guān)閉

關(guān)于網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)模板,主機(jī)配置為8G和16G內(nèi)存【按需調(diào)整】

參數(shù) 默認(rèn)配置 調(diào)整配置 說(shuō)明
fs.file-max 1048576 9999999 所有進(jìn)程打開(kāi)的文件描述符數(shù)
fs.nr_open 1635590 1635590 單個(gè)進(jìn)程可分配的最大文件數(shù)
net.core.rmem_default 124928 262144 默認(rèn)的TCP讀取緩沖區(qū)
net.core.wmem_default 124928 262144 默認(rèn)的TCP發(fā)送緩沖區(qū)
net.core.rmem_max 124928 8388608 默認(rèn)的TCP最大讀取緩沖區(qū)
net.core.wmem_max 124928 8388608 默認(rèn)的TCP最大發(fā)送緩沖區(qū)
net.ipv4.tcp_wmem 4096 16384 4194304 4096 16384 8388608 TCP發(fā)送緩沖區(qū)
net.ipv4.tcp_rmem 4096 87380 4194304 4096 87380 8388608 TCP讀取緩沖區(qū)
net.ipv4.tcp_mem 384657 512877 769314 384657 512877 3057792 TCP內(nèi)存大小
net.core.netdev_max_backlog 1000 5000 在每個(gè)網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時(shí),允許送到隊(duì)列的數(shù)據(jù)包的最大數(shù)目
net.core.optmem_max 20480 81920 每個(gè)套接字所允許的最大緩沖區(qū)的大小
net.core.somaxconn 128 2048 每一個(gè)端口最大的監(jiān)聽(tīng)隊(duì)列的長(zhǎng)度,這是個(gè)全局的參數(shù)
net.ipv4.tcp_fin_timeout 60 30 對(duì)于本端斷開(kāi)的socket連接,TCP保持在FIN-WAIT-2狀態(tài)的時(shí)間(秒)。對(duì)方可能會(huì)斷開(kāi)連接或一直不結(jié)束連接或不可預(yù)料的進(jìn)程死亡
net.core.netdev_max_backlog 1000 10000 在每個(gè)網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時(shí),允許送到隊(duì)列的數(shù)據(jù)包的最大數(shù)目
net.ipv4.tcp_max_syn_backlog 1024 2048 對(duì)于還未獲得對(duì)方確認(rèn)的連接請(qǐng)求,可保存在隊(duì)列中的最大數(shù)目。如果服務(wù)器經(jīng)常出現(xiàn)過(guò)載,可以嘗試增加這個(gè)數(shù)字
net.ipv4.tcp_max_tw_buckets 5000 5000 系統(tǒng)在同時(shí)所處理的最大timewait sockets數(shù)目
net.ipv4.tcp_tw_reuse 0 1 是否允許將TIME-WAIT sockets重新用于新的TCP連接
net.ipv4.tcp_keepalive_time 7200 900 表示TCP鏈接在多少秒之后沒(méi)有數(shù)據(jù)報(bào)文傳輸時(shí)啟動(dòng)探測(cè)報(bào)文(發(fā)送空的報(bào)文)
net.ipv4.tcp_keepalive_intvl 75 30 表示前一個(gè)探測(cè)報(bào)文和后一個(gè)探測(cè)報(bào)文之間的時(shí)間間隔
net.ipv4.tcp_keepalive_probes 9 3 表示探測(cè)的次數(shù)

注意:
參數(shù)值并不是設(shè)置的越大越好,有的需要考慮服務(wù)器的硬件配置,參數(shù)對(duì)服務(wù)器上其它服務(wù)的影響等。

2、本地端口號(hào)

有時(shí)候我們修改了文件句柄限制數(shù)后,錯(cuò)誤日志又會(huì)提示 "Can’t assignrequested address"。
這是因?yàn)門CP 建立連接,在創(chuàng)建 Socket 句柄時(shí),需要占用一個(gè)本地端口號(hào)(與 TCP 協(xié)議端口號(hào)不一樣),相當(dāng)于一個(gè)進(jìn)程,便于與其它進(jìn)程進(jìn)行交互。
Linux內(nèi)核的TCP/IP 協(xié)議實(shí)現(xiàn)模塊對(duì)本地端口號(hào)的范圍進(jìn)行了限制。當(dāng)端口號(hào)用盡,就會(huì)出現(xiàn)這種錯(cuò)誤了。

我們可以修改本地端口號(hào)的范圍。

#查看IP協(xié)議本地端口號(hào)限制
cat /proc/sys/net/ipv4/ip_local_port_range

#一般系統(tǒng)默認(rèn)為以下值
32768    61000

#修改本地端口號(hào)
vim /etc/sysctl.conf

#修改參數(shù)
net.ipv4.ip_local_port_range = 1024 65000

#保存修改后,需要執(zhí)行sysctl命令讓修改生效
sysctl -p

注意:
1、net.ipv4.ip_local_port_range的最小值為1024,1024以下的端口已經(jīng)規(guī)劃為TCP協(xié)議占用,如果想將 TCP 協(xié)議端口設(shè)置為8080等大端口號(hào),可以將這里的最小值調(diào)大。
2、如果存在應(yīng)用服務(wù)端口號(hào)大于1024的,應(yīng)該將 net.ipv4.ip_local_port_range 的起始值修改為大于應(yīng)用服務(wù)端口號(hào),否則服務(wù)會(huì)報(bào)錯(cuò)。

kernel.shmmax=4294967295
該參數(shù)定義了共享內(nèi)存段的最大尺寸(以字節(jié)為單位)。

其值應(yīng)>=sag_max_size初始化參數(shù)的大小,否則SAG由多個(gè)內(nèi)存段構(gòu)成,效率降低,
還要不小于物理內(nèi)存的一半,默認(rèn)情況下在32位x86系統(tǒng)中,Oracle SGA最大不能超過(guò)1.7GB.

kernel.shmmni=4096
這個(gè)內(nèi)核參數(shù)用于設(shè)置系統(tǒng)范圍內(nèi)共享內(nèi)存段的最大數(shù)量。該參數(shù)的默認(rèn)值是 4096.

kernel.shmall = 2097152
該參數(shù)表示系統(tǒng)任意時(shí)刻可以分配的所有共享內(nèi)存段的總和的最大值(以頁(yè)為單位).

其值應(yīng)不小于shmmax/page_size.缺省值就是2097152,如果服務(wù)器上運(yùn)行的所有實(shí)例的
SGA總和不超過(guò)8GB(通常系統(tǒng)可分配的共享內(nèi)存的和最大值為8GB),通常不需要修改.

vm.swappiness=0

內(nèi)存分配策略,設(shè)置為0是告訴系統(tǒng)除非虛擬內(nèi)存完全滿了 否則不要使用交換區(qū)

風(fēng)險(xiǎn):

降低操作系統(tǒng)性能
在系統(tǒng)資源不足下,容易被OOM kill掉

二、提高資源限制上限

配置文件位于 /etc/security/limit.conf

* soft nofile 65535
* hard nofile 65535

" * "對(duì)所有用戶有效

soft 當(dāng)前系統(tǒng)生效的設(shè)置

hard 系統(tǒng)所能設(shè)定的最大值

nofile 打開(kāi)文件的最大數(shù)目

65535 限制的數(shù)量

需要重啟系統(tǒng)生效

案例

一次nginx在早高峰時(shí)段大量用戶同時(shí)請(qǐng)求驗(yàn)證出現(xiàn)連接緩慢問(wèn)題,問(wèn)題是由于資源限制問(wèn)題導(dǎo)致

日志信息

2024/04/25 0823 [crit] 37451#0: accept4() failed (24: Too many open files)
2024/04/25 0824 [crit] 37451#0: accept4() failed (24: Too many open files)
2024/04/25 0824 [crit] 37451#0: accept4() failed (24: Too many open files)
2024/04/25 0825 [crit] 37451#0: accept4() failed (24: Too many open files)
2024/04/25 0825 [crit] 37451#0: accept4() failed (24: Too many open files)
2024/04/25 0826 [crit] 37451#0: accept4() failed (24: Too many open files)
2024/04/25 0826 [crit] 37451#0: accept4() failed (24: Too many open files)
2024/04/25 0827 [crit] 37451#0: accept4() failed (24: Too many open files)
2024/04/25 0827 [crit] 37451#0: accept4() failed (24: Too many open files)

報(bào)錯(cuò)原因
通過(guò)ulimit -a命令查詢,發(fā)現(xiàn)主機(jī)最初設(shè)置系統(tǒng)文件最大打開(kāi)數(shù)(open files )過(guò)于保守,致使早高峰時(shí)段大量用戶同時(shí)請(qǐng)求驗(yàn)證出現(xiàn)連接緩慢問(wèn)題。

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127886
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 127886
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

進(jìn)一步查看nginx進(jìn)程的limit限制,發(fā)現(xiàn)nginx主進(jìn)程軟限制是1024,硬限制是4096。

c4d2b36c-afde-11ef-93f3-92fbcf53809c.png

解決方式
修改配置文件/etc/security/limits.conf,增加配置以下配置并重啟Nginx主進(jìn)程:

root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535

Nginx配置文件增加配置:

worker_rlimit_nofile 65535;

驗(yàn)證
nginx進(jìn)程最大文件打開(kāi)數(shù)已設(shè)置成功

c4e3c008-afde-11ef-93f3-92fbcf53809c.png

三、磁盤調(diào)度策略

參數(shù)路徑:/sys/block/devname/queue/scheduler

簡(jiǎn)介:

noop電梯式調(diào)度策略
實(shí)現(xiàn)了一個(gè)FIFO隊(duì)列 傾向餓死讀而利于寫 對(duì)閃存設(shè)備 RAM嵌入式系統(tǒng)是最好的選擇

deadline 截止時(shí)間調(diào)度策略
確保了在一個(gè)截止時(shí)間內(nèi)服務(wù)請(qǐng)求 這個(gè)截止時(shí)間是可調(diào)整的 而默認(rèn)讀期限短于寫期限
對(duì)于數(shù)據(jù)庫(kù)類應(yīng)用是最好的選擇

anticipatory 預(yù)料IO調(diào)度策略
本質(zhì)上和deadline一樣 但在最后一次讀操作后 要等待6ms 才能繼續(xù)進(jìn)行對(duì)其他IO請(qǐng)求進(jìn)行調(diào)度 將一些小寫入流合并成一個(gè)大寫入流 用寫入延遲換取最大的寫入吞吐量 適合寫入較多的環(huán)境 比如文件服務(wù)器 對(duì)數(shù)據(jù)庫(kù)環(huán)境表現(xiàn)很差

cfq 絕對(duì)公平算法

內(nèi)核參數(shù)存儲(chǔ)路徑

文件/目錄 作用
/proc/sys/abi/* 用于提供對(duì)外部二進(jìn)制的支持,比如在類UNIX系統(tǒng),SCO UnixWare 7、SCO OpenServer和SUN Solaris 2上編譯的軟件。默認(rèn)情況下是安裝的,也可以在安裝過(guò)程中移除。
/proc/sys/fs/* 設(shè)置系統(tǒng)允許的打開(kāi)文件數(shù)和配額等。
/proc/sys/kernel/* 可以啟用熱插拔、操作共享內(nèi)存、設(shè)置最大的PID文件數(shù)和syslog中的debug級(jí)別。
/proc/sys/net/* 優(yōu)化網(wǎng)絡(luò),IPV4和IPV6
/proc/sys/vm/* 管理緩存和緩沖

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209323
  • 主機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    993

    瀏覽量

    35114

原文標(biāo)題:Linux之性能優(yōu)化

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux性能優(yōu)化大全!

    高并發(fā)和響應(yīng)快對(duì)應(yīng)著性能優(yōu)化的兩個(gè)核心指標(biāo):吞吐和延時(shí)
    發(fā)表于 11-21 11:23 ?677次閱讀

    HBase性能優(yōu)化方法總結(jié)

    HBase是Hadoop生態(tài)系統(tǒng)中的一個(gè)組件,是一個(gè)分布式、面向列的開(kāi)源數(shù)據(jù)庫(kù),可以支持?jǐn)?shù)百萬(wàn)列、超過(guò)10億行的數(shù)據(jù)存儲(chǔ),因此,對(duì)HBase性能提出了一定的要求,那么如何進(jìn)行HBase性能優(yōu)化
    發(fā)表于 04-20 17:16

    Linux系統(tǒng)的性能優(yōu)化策略

    近年來(lái),世界上許多大軟件公司紛紛推出各種Linux服務(wù)器系統(tǒng)及Linux下的應(yīng)用軟件。目前,Linux 已可以與各種傳統(tǒng)的商業(yè)操作系統(tǒng)分庭抗禮,在服務(wù)器市場(chǎng),占據(jù)了相當(dāng)大的份額。本文分別從磁盤調(diào)優(yōu),文件系統(tǒng),內(nèi)存管理以及編譯
    發(fā)表于 07-16 06:23

    Linux和Android系統(tǒng)故障和優(yōu)化性能的方法和流程探討

    作為一名Linux 或 Android 平臺(tái)的系統(tǒng)工程師,在開(kāi)發(fā)系統(tǒng)新功能外,主要工作就是優(yōu)化系統(tǒng)性能,使系統(tǒng)上以最優(yōu)的狀態(tài)運(yùn)行,但是由于硬件問(wèn)題、軟件問(wèn)題、網(wǎng)絡(luò)環(huán)境等的復(fù)雜性和多變性,導(dǎo)致對(duì)系統(tǒng)
    發(fā)表于 07-22 06:48

    css的性能優(yōu)化重點(diǎn)

    網(wǎng)站前端性能優(yōu)化javascript和css
    發(fā)表于 10-21 09:12

    MySQL優(yōu)化查詢性能優(yōu)化查詢優(yōu)化器的局限性與提示

    MySQL優(yōu)化三:查詢性能優(yōu)化查詢優(yōu)化器的局限性與提示
    發(fā)表于 06-02 06:34

    談一談Linux基礎(chǔ)Makfile文件

    Linux基礎(chǔ)Makfile文件Linux基礎(chǔ)Makfile文件編譯流程Makefile的介紹Makefile簡(jiǎn)單的練習(xí)Makefile的組成Makefile的組成Makefile
    發(fā)表于 12-15 08:58

    基于Linux的Socket網(wǎng)絡(luò)編程的性能優(yōu)化

    基于Linux的Socket網(wǎng)絡(luò)編程的性能優(yōu)化 隨著Intenet的日益發(fā)展和普及,網(wǎng)絡(luò)在嵌入式系統(tǒng)中應(yīng)用非常廣泛,越來(lái)越多的嵌入式設(shè)備采用Linux操作系統(tǒng)。
    發(fā)表于 10-22 20:48 ?1084次閱讀
    基于<b class='flag-5'>Linux</b>的Socket網(wǎng)絡(luò)編程的<b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b>

    Linuxchardev_buttom_linux_struc

    Linuxchardev_buttom_linux_struct_poll教程,很好的Linux資料,快來(lái)學(xué)習(xí)吧
    發(fā)表于 04-15 17:49 ?7次下載

    Linuxtasklet教程

    Linuxtasklet教程,很好的Linux自學(xué)資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-15 17:59 ?5次下載

    Linuxchardev_buttom_linux_struc

    Linuxchardev_buttom_linux_struct_timer_debounce教程,很好的Linux自學(xué)資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-15 17:59 ?5次下載

    Linux CPU的性能應(yīng)該如何優(yōu)化

    Linux系統(tǒng)中,由于成本的限制,往往會(huì)存在資源上的不足,例如 CPU、內(nèi)存、網(wǎng)絡(luò)、IO 性能。本文,就對(duì) Linux 進(jìn)程和 CPU 的原理進(jìn)行分析,總結(jié)出 CPU 性能
    的頭像 發(fā)表于 01-18 08:52 ?3375次閱讀

    影響Linux性能的因素與優(yōu)化方法

    ,那么linux作為一個(gè)開(kāi)源平臺(tái),最終要實(shí)現(xiàn)的是通過(guò)這些開(kāi)源軟件的支持,以最低廉的成本,達(dá)到應(yīng)用最優(yōu)的性能。因此,談到性能問(wèn)題,主要實(shí)現(xiàn)的是linux操作系統(tǒng)和應(yīng)用程序的最佳結(jié)合。
    的頭像 發(fā)表于 04-12 09:18 ?817次閱讀

    Linux內(nèi)核slab性能優(yōu)化的核心思想

    今天分享一篇內(nèi)存性能優(yōu)化的文章,文章用了大量精美的圖深入淺出地分析了Linux內(nèi)核slab性能優(yōu)化的核心思想,slab是
    的頭像 發(fā)表于 11-13 11:45 ?620次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核slab<b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b>的核心思想

    如何優(yōu)化Linux服務(wù)器的性能

    優(yōu)化Linux服務(wù)器的性能是一個(gè)綜合性的任務(wù),涉及硬件、軟件、配置、監(jiān)控等多個(gè)方面。以下是一個(gè)詳細(xì)的指南,旨在幫助系統(tǒng)管理員和運(yùn)維人員提升Linux服務(wù)器的
    的頭像 發(fā)表于 09-29 16:50 ?297次閱讀
    RM新时代网站-首页