Linux系统优化

前言

说明

系统优化是一项复杂、繁琐、长期的工作,优化前需要监测、采集、测试、评估,优化后也需要测试、采集、评估、监测,而且是一个长期和持续的过程。不是说现在优化了、测试了就可以一劳永逸,也不是说书本上的优化就适合眼下正在运行的系统。不同的系统、不同的硬件、不同的应用的优化的重点、方法和参数都不同。
性能检测是系统优化过程中重要的一环,如果没有监测、不清楚性能瓶颈在哪里,怎么优化呢?所以找到性能瓶颈是性能检测的目的,也是系统优化的关键。
系统由若干子系统构成,通常修改一个子系统有可能影响到另外一个子系统,甚至会导致整个系统不稳定、崩溃。
所以说优化、检测、测试通常是连在一起的,而且是一个循环而且长期的过程,通常监测的子系统有以下这些:

  • CPU
  • Memory
  • IO
  • Network
    这些子系统互相依赖,了解这些子系统的特性,监测这些子系统的系能参数以及及时发现可能会出现的瓶颈对系统优化很有帮助。本篇将按照 CPU、内存、磁盘 IO、网络这几个方面分别介绍。

应用类型

不同的系统用途也不同,要找到性能瓶颈需要知道系统跑的是什么应用、有些什么特点,比如 web server 对系统的要求肯定和 file server 不一样,所以分清不同系统的应用类型很重要。
通常应用可以分为两种类型:

  • IO相关
    • IO 相关的应用通常用来出来大量的数据,需要大量内存和存储,频繁 IO 操作读写数据
    • 对 CPU 的要求则较少,大部分时间 CPU 都在等待硬盘,比如,数据库服务器、文件服务器等
  • CPU相关
    • CPU 相关的应用需要使用大量 CPU
    • 比如高并发的 web/mail 服务器、图像 / 视频处理、科学计算等都可视作 CPU 相关的应用

监测工具

工具简介
top查看系统状态、硬件和系统信息等
vmstat查看系统状态、硬件和系统信息等
sar综合工具,查看系统状况

综合工具之sar

安装及简介

yum instal -y sysstat
sysstat 工具包中包含两类工具:
即时查看工具:iostat、mpstat、sar
累计统计工具:sar
也就是说,sar 具有这两种功能。因此,sar 是 sysstat 中的核心工具。
为了实现 sar 的累计统计,系统必须周期地记录当时的信息,这是通过调用 /usr/lib64/sa/ 中的三个工具实现的:
(1) sa1 :收集并存储每天系统动态信息到一个二进制的文件中,用作 sadc 的前端程序
(2) sa2 :收集每天的系统活跃信息写入总结性的报告,用作 sar 的前端程序
(3) sadc :系统动态数据收集工具,收集的数据被写入一个二进制的文件中,它被用作 sar 工具的后端
在 CentOS 系统的默认设置中,以如下的方式使用这三个工具:
在守护进程 /etc/rc.d/init.d/sysstat 中使用 /usr/lib/sa/sadc -F -L - 命令创建当日记录文件,文件为 /var/log/sa/saDD,其中 DD 为当天的日期。当系统重新启动后,会向文件 /var/log/sa/saDD 输出类似 11:37:16 AM LINUX RESTART 这样的行信息。
在 cron 任务 /etc/cron.d/sysstat 中每隔 10 分钟执行一次 /usr/lib/sa/sa1 1 1 命令,将信息写入文件 /var/log/sa/saDD
在 cron 任务 /etc/cron.d/sysstat 中每天 23:53 执行一次 /usr/lib/sa/sa2 -A 命令,将当天的汇总信息写入文件 /var/log/sa/saDD
您可以修改 /etc/cron.d/sysstat 以适合您的需要。
另外,文件 /var/log/sa/saDD 为二进制文件,不能使用 more、less 等文本工具查看,必须用 sar 或 sadf 命令查看。

使用

sar -n DEV 网卡流量
sar -q 系统负载
sar -b 磁盘读写
sar -f /var/log/sa/saxx 历史文件
sar 每十分钟把系统的状态过滤一遍,并生产日志在 ls /var/log/sa
sar -n DEV 1 10 查看网卡流量(没 1s 输出一次,总共输出 10 次,最后会将这十次的采集信息进行统计)
rxpck/s 接收到的数据包 如果你要接收很多数据包,证明有人给你发送数据包 就是被攻击 几千是正常的,上万就不正常了
txpck/s 发送的数据包
rxkB/s 数据量
rxcmp/S 数据量
sar -n DEV -f /var/log/sa/sa17 查看网卡流量并指定一个文件
sar -q 1 10 查看系统负载
sar -q -f /var/log/sa/sa17 查看当月 16 号的数据

如果没有定时过期清理,可以检查定时任务中的“53 23 * * * root /usr/lib64/sa/sa2 -A" 是否为注释状态

dstat

常用命令

  • dstat --top-cpu:显示最消耗 CPU 的进程
  • dstat --top-cuptime:最消耗 CPU 时间的进程,以毫秒为单位
  • dstat --top-io:显示消耗 io 最多的进程
  • dstat --top-latency:显示哪个进程有最大的延迟
  • dstat --top-mem:显示用内存最多的线程
  • dstat --top-mem --top-cpu:俩个一起使用也是OK的

Linux性能监测CPU

CPU 的占用主要取决于什么样的资源在 CPU 上面运行,比如拷贝一个文件通常占用较少的 CPU,因为大部分工作是由 DMA(Direct Memory Access)完成,只是在完成拷贝以后给一个中断让 CPU 知道拷贝已经完成;科学计算通常占用较多的 CPU,大部分计算工作都需要在 CPU 上完成,内存、硬盘等子系统只是做暂时的数据存储工作。
要想监测和理解 CPU 的性能需要知道一些的操作系统基本知识,比如:中断、进程调度、进程上下文切换、可运行队列等。
用一个例子来简单介绍一下这些概念和他们的关系,CPU 很无辜,是个任劳任怨的打工仔,每时每刻都有工作在做(进程、线程)并且自己有一张工作清单(可运行队列),由老板(进程调度)来决定他该干什么,他需要和老板沟通以便得到老板的想法并及时调整自己的工作(上下文切换),部分工作做完以后还需要及时向老板汇报(中断),所以打工仔(CPU)除了做自己该做的工作之外,还有大量时间和精力花在沟通和汇报上。
CPU 也是一种硬件资源,和任何其他设备一样也需要驱动和管理程序才能使用,我们可以把内核的进程调度看作是 CPU 的管理程序,用来管理和分配 CPU 资源,合理安排进程抢占 CPU,并决定哪个进程该使用 CPU、哪个进程该等待。
操作系统内核里的进程调度主要用来调度两类资源:进程(或线程)和中断,进程调度给不同的资源分配了不同的优先级,优先级最高的是硬件中断,其次是内核(系统)进程,最后是用户进程。

vmstat

vmstat 是个查看系统整体性能的小工具,小巧,即使在很 heavy 的情况下也允许良好,并且可以用时间间隔采集得到连续的性能数据。
参数介绍:

  • r,可运行队列的线程数,这些线程都是可运行状态,只不过 CPU 暂时不可用
  • b,被 blocked 的进程数,正在等待 IO 请求
  • in,被处理过的中断数
  • cs,系统上正在做上下文切换的数目
  • us,用户占用 CPU 的百分比
  • sys,内核和中断占用 CPU 的百分比
  • wa,所有可运行的线程被 blocked 以后都在等待 IO,这时候 CPU 空闲的百分比
  • id,CPU 完全空闲的百分比
    举两个例子分析一下
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 4  0    140 2915476 341288 3951700  0    0     0     0 1057  523 19 81  0  0  0
 4  0    140 2915724 341296 3951700  0    0     0     0 1048  546 19 81  0  0  0
 4  0    140 2915848 341296 3951700  0    0     0     0 1044  514 18 82  0  0  0
 4  0    140 2915848 341296 3951700  0    0     0    24 1044  564 20 80  0  0  0
 4  0    140 2915848 341296 3951700  0    0     0     0 1060  546 18 82  0  0  0

从上面的数据可以看出几点:

  • interrupts(in) 非常高,context switch(cs) 比较低,说明这个 CPU 一直在不停的请求资源
  • user time(us) 一直保持在 80% 以上,而且上下文切换较低 (cs),说明某个进程可能一直霸占着 CPU
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
14  0    140 2904316 341912 3952308  0    0     0   460 1106 9593 36 64  1  0  0
17  0    140 2903492 341912 3951780  0    0     0     0 1037 9614 35 65  1  0  0
20  0    140 2902016 341912 3952000  0    0     0     0 1046 9739 35 64  1  0  0
17  0    140 2903904 341912 3951888  0    0     0    76 1044 9879 37 63  0  0  0
16  0    140 2904580 341912 3952108  0    0     0     0 1055 9808 34 65  1  0  0

从上面的数据可以看出几点:

  • context switch(cs) 比 interrupts(in) 要高的多,说明内核不得不来回切换进程
  • 进一步观察发现 system time(sy) 很高而 user time(us) 很低,而且加上高频度的上下文切换 (cs),说明正在运行的应用程序调用了大量的系统调用
  • run queue(r) 在 14 个线程以上,按照这个而是机器的硬件配置 (4 核),应该保持在 12 以内

Linux性能监测 内存

这里讲到的内存包括物理内存和虚拟内存。虚拟内存 (Virtual Memory) 把计算机的内存空间扩展到硬盘,物理内存 (RAM) 和硬盘的一部分空间 (SWAP) 组合在一起作为虚拟内存为计算机提供了一个连续的虚拟内存空间,好处是我们拥有的内存变多了,可以运行更多、更大的程序,坏处是把部分硬盘当内存用,整体性能受到影响,硬盘读写速度要比内存慢几个数量级,并且 RAM 和 SWAP 之间的交换增加了系统的负担。
在操作系统里,虚拟内存被分为页,在 x86 系统上每个页大小是 4KB。Linux 内核读写虚拟内存是以“页”为单位操作的,把内存转移到硬盘交换空间 (SWAP) 和从交换空间读取内存的时候都是按页来读写的。
内存和 SWAP 的这种交互过程称为页面交换 (Paging),值得注意的是 paging 和 swapping 是两个完全不同的概念,国内很多参考书把这两个概念混为一谈,swapping 也翻译为交换,在操作系统里是指把某程序完全交换到硬盘以腾出内存给新程序使用,和 paging 只交换程序的部分(页面)是两个不同的概念。春吹的 swapping 在现代操作系统中已经很难看到了,因为把整个程序交换到硬盘的办法既耗时又费力而且没必要,现代操作系统基本都是 paging 或者 paging/swapping 混合,swapping 最初是在 Unix system V 上实现的。
虚拟内存管理是 Linux 内核里面最复杂的部分,要弄懂这部分内容可能需要一本书的讲解。这里只介绍和性能监测有关的两个内核进程:kswapd 和 pdflush。
kswapd daemon用来检查 pages_high 和 pages_low,如果可用内存少于 pages_low,kswapd 就开始扫描并试图释放 32 个页面,并且重复扫描释放的过程知道可用内存大于 pages_high 为止。扫描的时候检查 3 件事:

  • 如果页面没有修改,把页放到可用内存列表里
  • 如果页面被文件系统修改,把页面内容写到磁盘上
  • 如果页面被修改了,但不是被文件系统修改的,把页面写到交换空间

pdflush daemon用来同步文件相关的内存页面,把内存页面及时同步到硬盘上。比如打开一个文件,文件被导入到内存里,对文件修改并保存后,内核并不马上保存文件到硬盘,由 pdfush 决定什么时候把相应页面写到硬盘,这由一个内核参数 vm.dirty_background_ratio 来控制,比如下面的参数显示脏页面(dirty pages)达到所有内存页面 10% 的时候开始写入硬盘。

vmstat

继续 vmstat 一些参数的介绍,上一篇 Linux 性能监测:CPU 介绍了 vmstat 的部分参数,这里介绍另外一部分。以下数据来自一个 256MB RAM,512MB SWAP 的 Xen VPS:

# vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  3 252696   2432    268   7148 3604 2368  3608  2372  288  288  0  0 21 78  1
 0  2 253484   2216    228   7104 5368 2976  5372  3036  930  519  0  0  0 100  0
 0  1 259252   2616    128   6148 19784 18712 19784 18712 3821 1853  0  1  3 95  1
 1  2 260008   2188    144   6824 11824 2584 12664  2584 1347 1174 14  0  0 86  0
 2  1 262140   2964    128   5852 24912 17304 24952 17304 4737 2341 86 10  0  0  4

memory

  • swpd,已使用的 SWAP 控件大小,KB 为单位
  • free,可用的物理内存大小,KB 为单位
  • buff,物理内存用来缓存读写操作的 buffer 大小,KB 为单位
  • cache,物理内存用来缓存进程地址空间的 cache 大小,KB 为单位

swap

  • si,数据从 SWAP 读取到 RAM(swap in)的大小,KB 为单位
  • so,数据从 RAM 写到 SWAP(swap in)的大小,KB 为单位

io

  • bi,磁盘块从文件系统或 SWAP 读取到 RAM(blocks in)的大小,block 为单位
  • bo,磁盘块从 RAM 写到文件系统或 SWAP(blocks out)的大小,block 为单位

上面是一个频繁读写交换区的例子,可以观察到以下几点:

  • 物理可用内存 free 基本没有显著变化,swapd 逐步增加,说明最小可用的内存使用保持在 256MB X 10% = 2.56MB 左右,当脏数据达到 10% 的时候 (vm.dirty_background_ratio = 10) 就开始大量使用 swap
  • buff 稳步减少说明系统知道内存不够用了,kwapd 正在从 buff 那里借用部分内存
  • kswapd 持续把脏数据写到 swap 交换区 (so),并且从 swapd 主键增加看出确实如此。根据上面将的 kswapd 扫描时检查的三件事,如果页面被修改了,但不是被文件系统修改的,把页面写到 swap,所以这里 swapd 持续增加

Linux性能监测 磁盘IO

磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 最远而且 CPU 访问磁盘涉及到机械操作,比如转轴、寻轨等,访问硬盘和访问内存之间的速度差别是以数量级来计算的,就像 1 天和 1 分钟的差别一样,要监测 IO 性能,有必要了解一下基本原理和 Linux 是如何处理硬盘和内存之间的 IO 的。

内存页

Memory 介绍中提到了内存和硬盘之间的 IO 是以页为单位来进行的,在 Linux 系统上 1 页的大小为 4K。可以用下面命令查看系统默认的页面大小:

$getconf  PAGESIZE
...
4096
...

缺页中断

Linux 利用虚拟内存极大的扩展了程序地址空间,是的原来物理内存不能容下的程序也可以通过内存和硬盘之间的不断交换(把暂时不用的内存页交换到硬盘,把需要的内存页从硬盘读到内存)来赢得更多的内存,看起来就像物理内存被扩大一样。
事实上这个过程对程序是完全透明的,程序完全不用理会自己哪一部分、什么时候被交换到内存,一切都在内核的虚拟内存管理来完成
当程序启动的时候,Linux 内核首先检查 CPU 的缓存和物理内存,如果数据已经在内存里就忽略,如果数据不再内存里就引起一个缺页中断(Page Fault),然后从硬盘读取缺页,并把缺页缓存到物理内存中。
缺页中断可分为主缺页中断(Major Page Fault)和次缺页中断(Minor Page Fault),要从磁盘读取数据而产生的中断是主缺页中断;数据已经读到内存并被缓存起来,从内存缓存区中而不是直接从硬盘中读取数据而产生的中断是次缺页中断。
上面的内存缓存区起到了预读硬盘的作用,内核现在物理内存里寻找缺页,没有的话产生次缺页中断从内存缓存中找,如果还没有发现的话就从硬盘读取。很显然,把多于的内存拿出来做成内存缓存区有助于提高访问速度。
这里还有一个命中率的问题,运气好的话如果每次缺页都能从内存缓存区读取的话将会极大提升性能。要提升命中率的一个简单的方法就是增大内存缓存区面积,缓存区越大预存的页面就越多,命中率也会越多。

File Buffer Cache

从上面的内存缓存区(也叫文件缓存区 File Buffer Cache) 读取页比从硬盘读取页要快的多,所以 Linux 内核希望能尽可能产生次却也中断(从文件缓存区读),并且能尽可能避免主缺页中断(从硬盘读),这样随着次缺页中断的增多,文件缓存区也逐步增大,直到系统只有少量可用物理内存的时候 Linux 才开始释放不用的页。
我们运行 Linux 一段时间后会发现虽然系统上运行的程序不多,但是可用内存总是很少,这样给大家造成了 Linux 对内存管理很低效的假象,事实上 Linux 把哪些暂时不用的物理内存高效的利用起来做预存(内存缓存区)呢。下面打印的是一台 Sun 服务器上的物理内存和文件缓存区的情况:

$ cat /proc/meminfo
MemTotal:      8182776 kB
MemFree:       3053808 kB
Buffers:        342704 kB
Cached:        3972748 kB

页面类型

Linux 中内存页面有三种类型:

  • Read Pages,只读页(或代码页),那些通过主缺页中断从硬盘读取的页面,包括不能修改的静态文件、可执行文件、库文件等。当内核需要它们的时候把它们读到内存中,当内存不足的时候,内核就释放它们到空闲列表,当程序再次需要它们的时候需要通过缺页中断再次读到内存
  • Dirty Pages,脏页,指那些在内存中被修改过的数据页,比如文本文件等。这些文件有 pdflush 负责同步到硬盘,内存不足的时候由 kswapd 和 pdflush 把数据写回硬盘并释放内存
  • Anonymous Pages,匿名页,那些属于某个进程但是又和任何文件无关联,不能被同步到硬盘上,内存不足的时候有 kswapd 负责将它们写到交换分区并释放内存

IO’s Per Seconds(IOPS)

每次磁盘 IO 请求都需要一定的时间,和访问内存比起来这个等待时间简直难以忍受。
在一台 2001 年典型 1GHz PC 上,磁盘随机访问一个 word 需要 8000000 nanosec = 8 millisec,顺序访问一个 word 需要 200nanosec;而从内存访问一个 word 只需要 10 nanoses。(数据来自:Teach Yourself Programming in Ten Years)这个硬盘可以提供 125 次 IOPS(1000 ms / 8 ms)。

顺序IO和随机IO

IO 分为顺序 IO 和随机 IO 两种,性能监测前需要弄清楚系统偏向顺序 IO 的应用还是随机 IO 的应用。
随机 IO 是指同时顺序请求大量数据,比如数据库执行大量的查询、流媒体服务等,顺序 IO 可以同时很快的移动大量数据。可以这样来评估 IOPS 的性能,用每秒读写 IO 字节数除以每秒读写 IOPS 数,rkB/s 除以 r/s,wkB/s 除以 w/s。下面显示的是连续两秒的 IO 情况,可见每次 IO 写的数据是增加的(45060.00 / 99.00 = 455.15 KB per IO,54272.00 / 112.00 = 484.57 KB per IO)。
相对随机 IO 而言,顺序 IO 更应该重视每次 IO 的吞吐能力(KB per IO):

$ iostat -kx 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    2.50   25.25    0.00   72.25

Device:  rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb       24.00 19995.00 29.00 99.00  4228.00 45060.00   770.12    45.01  539.65   7.80  99.80

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    1.00   30.67    0.00   68.33

Device:  rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb        3.00 12235.00  3.00 112.00   768.00 54272.00   957.22   144.85  576.44   8.70 100.10

随机 IO 是指随机请求数据,其 IO 速度不依赖于数据的大小和排序,依赖于磁盘的每秒能 IO 的次数,比如 Web 服务、Mial 服务等每次请求的数据都很小,随机 IO 每次同时会有更多的请求数产生,所以磁盘的每秒能 IO 多少次是关键。

$ iostat -kx 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.75    0.00    0.75    0.25    0.00   97.26

Device:  rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb        0.00    52.00  0.00 57.00     0.00   436.00    15.30     0.03    0.54   0.23   1.30

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.75    0.00    0.75    0.25    0.00   97.24

Device:  rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb        0.00    56.44  0.00 66.34     0.00   491.09    14.81     0.04    0.54   0.19   1.29

按照上面的公式得出:436.00 / 57.00 = 7.65KB per IO, 491.09 / 66.34 = 7.40 KB per IO ,与顺序 IO 比较发现,随机 IO 的 KB per IO 小到可以忽略不计,可见对于随机 IO 而言重要的是每秒能 IOPS 的次数,而不是每次 IO 的吞吐能力(KB per IO)。

SWAP

当系统没有足够物理内存来应付所有请求的时候就会用到 swap 设备,swap 设备可以是一个文件,也可以是磁盘分区。
不过要小心的是,使用 swap 的代价非常大。如果系统没有物理内存可用,就会频繁 swapping,如果 swap 设备和程序正在访问的数据在同一个文件系统上,那会碰到严重的 IO 问题,最终导致整个系统迟缓,甚至崩溃。
swap 设备和内存之间的 swapping 状况是判断 Linux 系统性能的重要参考,我们已经有很多工具可以用来监测 swap 和 swapping 的情况,比如:top、cat/proc/meminfo、vmstat 等:

$ cat /proc/meminfo
MemTotal:      8182776 kB
MemFree:       2125476 kB
Buffers:        347952 kB
Cached:        4892024 kB
SwapCached:        112 kB
...
SwapTotal:     4096564 kB
SwapFree:      4096424 kB
...

关掉swap

(1) 将 /etc/fstab 文件中所有设置为 swap 的设备关闭
[root@meetbill ~]# swapoff -a

(2) 设置开机不启动 swap
将 /etc/fstab 中 swap 行注释掉

Linux性能监测 网络篇

网络的监测是所有 Linux 子系统里面最复杂的,有太多的因素在里面,比如:延迟、阻塞、冲突、丢包等,更糟的是与 Linux 主机相连的路由器、交换机、无线信号都会影响到整体网络并且很难判断是因为 Linux 网络子系统的问题还是别的设备的问题,增加了监测和判断的复杂度。
iptraf 就是一个很好的查看本机网络吞吐量的好工具,支持文字图形界面,很直观。下面图片显示在 100mbps 速率的网络下这个 Linux 系统的发送传输率有点慢,Outgoing rates 只有 66mbps:

# yum install iptraf
# iptraf-ng -d ens33

ulimit关于系统连接数的优化

linux 默认值 open files 和 max user processes 为 1024

#ulimit -n
1024
#ulimit –u
1024

问题描述: 说明 server 只允许同时打开 1024 个文件,处理 1024 个用户进程
使用 ulimit -a 可以查看当前系统的所有限制值,使用 ulimit -n 可以查看当前的最大打开文件数。
新装的 linux 默认只有 1024 ,当作负载较大的服务器时,很容易遇到 error: too many open files 。因此,需要将其改大。

解决方法:
使用 ulimit –n 65535 可即时修改,但重启后就无效了。(注 ulimit -SHn 65535 等效 ulimit -n 65535 ,-S 指 soft ,-H 指 hard)

修改方式

有如下三种修改方式:

  • 在 /etc/rc.local 中增加一行 ulimit -SHn 65535
  • 在 /etc/profile 中增加一行 ulimit -SHn 65535
  • 在 /etc/security/limits.conf 最后增加:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

具体使用哪种,在 CentOS 中使用第 1 种方式无效果,使用第 3 种方式有效果,而在 Debian 中使用第 2 种有效果。

备注:ulimit 命令本身就有分软硬设置,加 -H 就是硬,加 -S 就是软默认显示的是软限制

#!/bin/bash

file=/etc/security/limits.conf

if grep '^* soft nofile' $file > /dev/null ;then
   sed -i 's/^* soft nofile.*/* soft nofile 1024000/' $file
else
   echo '* soft nofile 1024000' >> $file
fi

if grep '^* hard nofile' $file > /dev/null ;then
   sed -i 's/^* hard nofile.*/* hard nofile 1024000/' $file
else
   echo '* hard nofile 1024000' >> $file
fi

ulimit -SHn 1024000

原文地址:https://github.com/meetbill/op_practice_book/blob/master/doc/Linux/optimize.md

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值