一:內核簡介
內核是操作系統最基本的部分。它是為眾多應用程序提供對計算機硬件的安全訪問的一部分軟件,這種訪問是有限的,並且內核決定一個程序在什么時候對某部分硬件操作多長時間。
內核的分類可分為單內核和雙內核以及微內核。嚴格地說,內核並不是計算機系統中必要的組成部分。
什么是內核?
內核,是一個操作系統的核心。是基於硬件的第一層軟件擴充,提供操作系統的最基本的功能,是操作系統工作的基礎,它負責管理系統的進程、內存、內核體系結構、設備驅動程序、文件和網絡系統,決定着系統的性能和穩定性。
什么是線程?
線程:是操作系統能夠進行運算調度的最小單位。 它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進 程中一個單一順序的控制流,一個進程中可以並發多個線程,每條線程並行執行不同的任務在一個程序里的一個執行路徑就叫做線程。線程是一個進程內部的控制序列。一切進程至少有一個執行線程。線程在進程內部運行,本質是進程地址空間內運行。在Linux系統中,在cpu眼里,看到的PCB都有比傳統的進程更加輕量化。通過進程虛擬地址空間,可以看到進程大部分資源,將進程資源合理分配給每個執行流,就形成了線程執行流。
什么是進程?
centos linux的第一個進程通常是init或者systemd,它是所有進程的父進程,PID為1,是唯一一個由系統內核直接運行 的進程
Linux 給每個進程都打上了運行者的標志,用戶可以控制自己的進程:給自己的進程分配不同的優先級,也可以隨時終止自己的進程
Linux 不可能在一個 CPU 上同時處理多個任務(作業)請求,而是采用 “分時” 技術來處理這些任務請求
除了init或者systemd,其他進程都是由父進程創建,即每個進程都有父進程(PPID)
二:查看系統資源
1.查看當前系統的所有限制值
命令:ulimit -a
核心文件大小(塊,-c)0
數據段大小(kbytes,-d)不受限制
計划優先級0
文件大小(塊,-f)不受限制
掛起信號(-i)7190
最大鎖定內存(KB,-l)64
最大內存大小(kbytes,-m)不受限制
打開文件(-n)1024
管道大小(512字節,-p)8
POSIX消息隊列(字節,-q)819200
實時優先級0
堆棧大小(kbytes,-s)8192
cpu時間(秒,-t)無限制
最大用戶進程(-u)7190
虛擬內存(KB,-v)不受限制
文件鎖定(-x)不受限制
2.查看用戶同時打開的文件數(linux系統默認的只要1024) 也是臨時修改(不需要重啟),命令后面加參數即可:ulimit -n 65535
命令:ulimit -n
3.查看Linux系統級的最大打開文件數限制
命令:cat /proc/sys/fs/file-max
4.ulimit的選項用法
-a 顯示目前資源限制的設定
-c <core文件上限> 設定core文件的最大值,單位為區塊
-d <數據節區大小> 程序數據節區的最大值,單位為KB
-f <文件大小> shell所能建立的最大文件,單位為區塊
-H 設定資源的硬性限制,也就是管理員所設下的限制
-m <內存大小> 指定可使用內存的上限,單位為KB
-n <文件數目> 指定同一時間最多可開啟的文件數
-p <緩沖區大小> 指定管道緩沖區的大小,單位512字節
-s <堆疊大小> 指定堆疊的上限,單位為KB
-S 設定資源的彈性限制
-t <CPU時間> 指定CPU使用時間的上限,單位為秒
-u <程序數目> 用戶最多可開啟的程序數目
-v <虛擬內存大小> 指定可使用的虛擬內存上限,單位為KB
三:系統資源限制設置(使用root權限)
命令:vim /etc/security/limits.conf
在最后添加下面這幾句:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
知識擴展:
noproc 是代表最大進程數
nofile 是代最大文件打開數
* 是表示修改所有用戶的限制
命令:vim /etc/security/limits.d/20-nproc.conf
修改一下參數:
#* soft nproc 65535
#root soft nproc unlimited
* soft nproc 65535
* hard nproc 65535
注釋原本的,添加新增的
然后執行reboot命令重啟,root和普通用戶的線程和最大打開文件數了都是65535
重啟之后執行ulimit -a命令查看
命令:ulimit -a
如果是生產環境的話,就添加以下內容
命令:vim /etc/security/limits.conf
* soft core unlimit
* hard core unlimit
* soft fsize unlimited
* hard fsize unlimited
* soft data unlimited
* hard data unlimited
* soft nproc 65535
* hard nproc 63535
* soft stack unlimited
* hard stack unlimited
* soft nofile 409600
* hard nofile 409600
四:內核優化
命令:cat /etc/sysctl.conf
打開內核配置文件
命令:vim /etc/sysctl.d/99-sysctl.conf
將以下配置輸入進去:
#關閉ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# 避免放大攻擊
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 開啟惡意icmp錯誤消息保護
net.ipv4.icmp_ignore_bogus_error_responses = 1
# 關閉路由轉發
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
#開啟反向路徑過濾
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
關閉sysrq功能
kernel.sysrq = 0
#core文件名中添加pid作為擴展名
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
#修改消息隊列長度
kernel.msgmnb = 65536
kernel.msgmax = 65536
#設置最大內存共享段大小bytes
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
#timewait的數量,默認180000
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
#限制僅僅是為了防止簡單的DoS 攻擊
net.ipv4.tcp_max_orphans = 3276800
#未收到客戶端確認信息的連接請求的最大值
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
#內核放棄建立連接之前發送SYNACK 包的數量
net.ipv4.tcp_synack_retries = 1
#內核放棄建立連接之前發送SYN 包的數量
net.ipv4.tcp_syn_retries = 1
#啟用timewait 快速回收
net.ipv4.tcp_tw_recycle = 1
#開啟重用。允許將TIME-WAIT sockets 重新用於新的TCP連接
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
#當keepalive 起用的時候,TCP 發送keepalive 消息的頻度。缺省是2 小時
net.ipv4.tcp_keepalive_time = 30
#允許系統打開的端口范圍
net.ipv4.ip_local_port_range = 1024 65000
#修改防火牆表大小,默認65536
net.netfilter.nf_conntrack_max=655350
net.netfilter.nf_conntrack_tcp_timeout_established=1200
# 確保無人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
然后保存退出之后執行sysctl -p是參數生效,永久生效
命令:sysctl -p
總結:。。。。。。。。此處省略一萬字