Linux
2021-02-04 14:20:00 1 举报
AI智能生成
Linux性能优化相关命令
作者其他创作
大纲/内容
信号
kill信号大全
不可靠信号(非实时的) 编号1-31
可靠信号(实时信号)编号32-63
下面是常用的旌旗灯号:<br><br>HUP 1 终端断线<br><br>INT 2 中断(同 Ctrl + C)Kill-2:功能类似于Ctrl+C是程序在结束之前,能够保存相关数据,然后再退出。<br><br>QUIT 3 退出(同 Ctrl + )<br><br>TERM 15 终止<br><br>KILL 9 强迫终止<br><br>CONT 18 持续(与STOP相反, fg/bg号令)<br><br>STOP 19 暂停(同 Ctrl + Z)<br><br>原文链接:https://blog.csdn.net/llljjlj/article/details/89913629
一般来说,在linux shell中<br>ctrl-c 是发送 SIGINT 信号, <br>ctrl-z 是发送 SIGSTOP信号 <br>ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF
收到信号的进程对信号的处理方法?
第一种是类似中断的处理程序,对于需要处理的信号,进程可以指定处理函数,由该函数来处理。<br><br>第二种方法是,忽略某个信号,对该信号不做任何处理,就象未发生过一样。<br><br>第三种方法是,对该信号的处理保留系统的默认值,这种缺省操作,对大部分的信号的缺省操作是使得进程终止。进程通过系统调用signal来指定进程对某个信号的处理行为。
信号处理流程
信号诞生<br><br>信号在进程中注册<br><br>信号的执行和注销
抓包相关命令
tcpdump
参数选项
linux性能分析命令
背景
<span style="color: rgb(100, 100, 100); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="font-variant-ligatures: normal;">应用程序的行为细节往往与系统内核互相牵扯的,</span>底层的东西会以意想不到的方式影响应用程序的性能,比如某些程序无法充分利用 cache,从而导致性能下降。比如不必要地调用过多的系统调用,造成频繁的内核 / 用户切换等</span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">vmstat(VirtualMeomoryStatistics,虚拟内存统计)(cpu,内存,io)</span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">Linux中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU等的整体情况进行监视。</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">vmstat的常规用法:vmstat interval times即每隔interval秒采样一次,共采样times次,如果省略times,则一直采集数据,直到用户手动停止为止。</span><br>
<span style="font-weight: 600; color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">iostat--用于报告中央处理器统计信息</span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">iostat用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息,默认显示了与vmstat相同的cpu使用信息</span><br>
<span style="font-weight: 600; color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">top</span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">top命令的汇总区域显示了五个方面的系统性能信息:</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">1.负载:时间,登陆用户数,系统平均负载;</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">2.进程:运行,睡眠,停止,僵尸;</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">3.cpu:用户态,核心态,NICE,空闲,等待IO,中断等;</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">4.内存:总量,已用,空闲(系统角度),缓冲,缓存;</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">5.交换分区:总量,已用,空闲</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">任务区域默认显示:进程ID,有效用户,进程优先级,NICE值,进程使用的虚拟内存,物理内存和共享内存,进程状态,CPU占用率,内存占用率,累计CPU时间,进程命令行信息。</span><br>
<span style="font-weight: 600; color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">mpstat</span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">mpstat 是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。常见用法:mpstat –P ALL interval times。</span><br>
<span style="font-weight: 600; color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">dstat--系统监控工具</span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">dstat显示了cpu使用情况,磁盘io情况,网络发包情况和换页情况,输出是彩色的,可读性较强,相对于vmstat和iostat的输入更加详细且较为直观。在使用时,直接输入命令即可,当然也可以使用特定参数。</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">如下:dstat –cdlmnpsy</span><br>
<span style="font-weight: 600; color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">iotop--LINUX进程实时监控工具</span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">iotop命令是专门显示硬盘IO的命令,界面风格类似top命令,可以</span><span style="font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><font color="#c41230">显示IO负载具体是由哪个进程产生的。是一个用来监视磁盘I/O使用状况的top类工具</font></span><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">,具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">可以以非交互的方式使用:iotop –bod interval,查看每个进程的I/O,可以使用pidstat,pidstat –d instat。</span><br>
<span style="font-weight: 600; color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">pidstat--监控系统资源情况</span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">使用方法:pidstat –d interval;pidstat还可以用以统计CPU使用信息:pidstat –u interval;统计内存信息:Pidstat –r interval。</span><br>
<span style="font-weight: 600; color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">htop</span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">htop 是Linux系统中的一个互动的进程查看</span><br><div><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="font-variant-ligatures: normal;">与top相比,htop有以下优点:</span><br style="font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;">▪ 可以横向或者纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。</span><br style="font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;">▪ 在启动上,比top更快。</span><br style="font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;">▪ 杀进程时不需要输入进程号。</span><br style="font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;">▪ htop支持鼠标操作。</span><br></span></div>
<span style="font-weight: 600; font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><font color="#c41230">netstat</font></span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">▲常见用法:</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">netstat –npl 可以查看你要打开的端口是否已经打开。</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">netstat –rn 打印路由表信息。</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">netstat –in 提供系统上的接口信息,打印每个接口的MTU,输入分组数,输入错误,输出分组数,输出错误,冲突以及当前的输出队列的长度。</span><br>
<span style="font-weight: 600; font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><font color="#c41230">lsof</font></span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">lsof(list open files)是一个列出当前系统打开文件的工具。通过lsof工具能够查看这个列表对系统检测及排错,常见的用法:</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">查看文件系统阻塞 lsof /boot</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">查看端口号被哪个进程占用 lsof -i : 3306</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">查看用户打开哪些文件 lsof –u username</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">查看进程打开哪些文件 lsof –p 4838</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">查看远程已打开的网络链接 lsof –i @192.168.34.128</span><br>
<span style="font-weight: 600; color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">ps--显示当前进程的状态</span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">ps参数太多,具体使用方法可以参考man ps,常用的方法:ps aux #hsserver;ps –ef |grep #hundsun</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">▪ 杀掉某一程序的方法:ps aux | grep mysqld | grep –v grep | awk ‘{print $2 }’ xargs kill -9</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">▪ 杀掉僵尸进程:ps –eal | awk ‘{if ($2 == “Z”){print $4}}’ | xargs kill -9</span><br>
<span style="font-weight: 600; color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">uptime</span><br>
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">能够打印系统总共运行了多长时间和系统的平均负载,uptime命令最后输出的三个数字的含义分别是1分钟,5分钟,15分钟内系统的平均负荷。</span><br>
perf
<span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">perf是Linux kernel自带的系统性能优化工具。优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature,用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能。</span><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><br style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="color: rgb(26, 26, 26); font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-variant-ligatures: normal; orphans: 2; widows: 2;">性能调优工具如 perf,Oprofile 等的基本原理都是对被监测对象进行采样,最简单的情形是根据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序当时的上下文。假如一个程序 90% 的时间都花费在函数 foo() 上,那么 90% 的采样点都应该落在函数 foo() 的上下文中。运气不可捉摸,但我想只要采样频率足够高,采样时间足够长,那么以上推论就比较可靠。因此,通过 tick 触发采样,我们便可以了解程序中哪些地方最耗时间,从而重点分析。</span><br>
<span style="font-size: 16px; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;">Perf 是内置于Linux 内核源码树中的性能剖析(profiling)工具。它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。可用于性能瓶颈的查找与热点代码的定位</span><br>
主要作用
<div>Perf工具可用来对软件进行优化,包括算法优化(空间复杂度、时间复杂度)和代码优化(提高执行速度、减少内存占用)。还可以评估程序对硬件资源的使用情况,例如各级cache的访问次数,各级cache的丢失次数、流水线停顿周期、前端总线访问次数等。也可以<font color="#c41230">评估程序对操作系统资源的使用情况,系统调用次数、上下文切换次数、任务迁移次数等</font></div>
常用命令
<p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: normal; orphans: 2; widows: 2;">1、 perf list</p><p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: normal; orphans: 2; widows: 2;">2、 perf stat</p><p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: normal; orphans: 2; widows: 2;">3、 perf top</p><p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: normal; orphans: 2; widows: 2;">4、 perf record/report</p><br>
常用命令总结
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">iperf:网络带宽测量工具</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">ipcs:报告进程间通信设施状态,关于当前活动消息队列、共享内存段、信号量、远程队列和本地队列标题。</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">ipcrm:删除消息队列、信号集、或者共享内存标识</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">quota:磁盘管理命令。显示磁盘使用情况和限额</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">repquota:磁盘管理命令。报告磁盘空间限制的状况,清楚得知每位用户或每个群组已使用多少空间</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">edquota:磁盘管理命令。编辑用户或群组的quota</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">quotacheck:磁盘管理命令。检查磁盘的使用空间与限制,执行quotacheck指令,扫描挂入系统的分区,并在各分区的文件系统根目录下产生quota.user和quota.group文件,设置用户和群组的磁盘空间限制。</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">quoton:磁盘管理命令。启动系统quota限制硬盘使用空间</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">sysctl:配置与显示在/proc/sys目录中的内核参数。一个允许您改变正在运行中的Linux系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能。用sysctl可以读取设置超过五百个系统变量。基于这点,sysctl(8) 提供两个功能:读取和修改系统设置。可以使用sysctl修改系统变量,也可以通过编辑sysctl.conf文件来修改系统变量。</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">tethereal:类似tcpdump的抓包工具</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">iptraf:网络流量实时监控工具</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">nfsstat:查看NFS服务器状态,显示关于NFS和到内核的远程过程调用(RPC)接口的统计信息,也可以使用该命令重新初始化该信息</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">mrtg:监控网络链路流量负载的工具软件,通过snmp协议得到设备的流量信息,并将流量负载以包含PNG格式的图形的HTML 文档方式显示给用户,以非常直观的形式显示流量负载</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">ntop:监控网络流量工具,同时提供命令行输入和web页面,可应用于嵌入式web服务</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">mkswap:设置交换区(swap area),可将磁盘分区或文件设为Linux的交换区</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">swapon:激活/开启swap</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">swapoff:关闭swap</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">ulimit:控制/限定shell程序的资源</span><br>
Linux性能检测常用的10个基本命令
pstack
pstack用来跟踪进程栈,这个命令在排查进程问题时非常有用,比如我们发现一个服务一直处于work状态(如假死状态,好似死循环),使用这个命令就能轻松定位问题所在
使用 pstack 进程ID
strace
跟踪程序执行过程中产生的系统调用及接收到的信号,帮助分析程序或命令执行中遇到的异常情况。
性能优化工具
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">CPU性能调优工具</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">nice / renice</span><br>
<p style="box-sizing: border-box; margin-bottom: 16px; color: rgb(86, 101, 115); font-size: 15px; font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-variant-ligatures: normal; orphans: 2; widows: 2;">有时我们需要执行一个程序,并且这个程序比较重要而且比较紧急,而CPU空闲的资源也比较少,这个时候我们就需要来调整这个程序的进程优先级,来给这个程序分配更多的CPU资源并且优先执行。</p><p style="box-sizing: border-box; margin-bottom: 16px; color: rgb(86, 101, 115); font-size: 15px; font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-variant-ligatures: normal; orphans: 2; widows: 2;"> Linux下的renice和nice都是调整进程优先级的工具,优先级的值的范围是(-20至19),-20为最高优先级,19为最低优先级,默认程序进程的优先级为0。</p>
区别
<span style="color: rgb(86, 101, 115); font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 15px; font-variant-ligatures: normal; orphans: 2; widows: 2;"> renice命令可以调整Linux中</span><span style="box-sizing: border-box; font-weight: 600; color: rgb(86, 101, 115); font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 15px; font-variant-ligatures: normal; orphans: 2; widows: 2;">正在运行的进程</span><span style="color: rgb(86, 101, 115); font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 15px; font-variant-ligatures: normal; orphans: 2; widows: 2;">的优先级。</span><br>
如:<p style="margin-bottom: 16px; box-sizing: border-box; color: rgb(86, 101, 115); font-size: 15px; font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="font-variant-ligatures: normal;">通过PID修改指令cat优先级为-20命令:</span></p><span style="color: rgb(153, 153, 136); font-style: italic; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 12px; orphans: 2; widows: 2; background-color: rgb(247, 247, 247);">renice -n -20 -p 80886</span><div><span style="color: rgb(86, 101, 115); font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 15px; font-variant-ligatures: normal; orphans: 2; widows: 2;">修改用户root优先级为-10命令</span><span style="color: rgb(153, 153, 136); font-style: italic; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 12px; orphans: 2; widows: 2; background-color: rgb(247, 247, 247);">renice -n -10 -u root </span><span style="color: rgb(86, 101, 115); font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 15px; orphans: 2; widows: 2;">当前用户root的进程优先级均为10</span></div>
<span style="color: rgb(86, 101, 115); font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 15px; font-variant-ligatures: normal; orphans: 2; widows: 2;">nice命令:在</span><span style="box-sizing: border-box; font-weight: 600; color: rgb(86, 101, 115); font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 15px; font-variant-ligatures: normal; orphans: 2; widows: 2;">启动程序时</span><span style="color: rgb(86, 101, 115); font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 15px; font-variant-ligatures: normal; orphans: 2; widows: 2;">设置优先级。</span><br>
如:<span style="color: rgb(153, 153, 153); font-weight: bold; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 12px; orphans: 2; widows: 2; background-color: rgb(247, 247, 247);">nice -n -5 cat /dev/zero > /dev/null & 设置cat优先级为-5</span>
<span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">sysctl</span><br>
<span style="color: rgb(0, 0, 0); font-family: "Helvetica Neue", Helvetica, Verdana, Arial, sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;">用于运行时配置内核参数,这些参数位于/proc/sys目录下。sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能,</span><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; white-space: pre-wrap; background-color: rgb(245, 245, 245);"> -</span><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; white-space: pre-wrap; background-color: rgb(245, 245, 245); margin: 0px; padding: 0px; line-height: 1.5 !important;">a 显示所有的系统参数</span>
<p style="margin: 10px auto; padding: 0px; line-height: 1.5; color: rgb(0, 0, 0); font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2;">进程绑定(一个进程可以绑定在一个或者多个CPU上)例如,taskset -pc 0-3 10790</p><div><p style="margin: 10px auto; padding: 0px; line-height: 1.5; color: rgb(0, 0, 0); font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2;">独占CPU</p><br></div>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">当一个系统的CPU空闲时间或者等待时间小于5%时,我们就可以认为系统的CPU资源耗尽,我们应该对CPU进行性能调整。</span><br><div><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="font-variant-ligatures: normal;">CPU性能调整方法:</span><br style="margin: 0px; padding: 0px; font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;">编辑/proc/sys/kernel/中的文件,修改内核参数。</span><br style="margin: 0px; padding: 0px; font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;">#cd /proc/sys/kernel/</span><br style="margin: 0px; padding: 0px; font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;"># ls /proc/sys/kernel/</span><br style="margin: 0px; padding: 0px; font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;">一般可能需要编辑的是pid_max和threads-max,增大进程数量和线程数量,如下:</span><br style="margin: 0px; padding: 0px; font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;"># sysctl kernel.threads-max</span><br style="margin: 0px; padding: 0px; font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;">kernel.threads-max = 8192</span><br style="margin: 0px; padding: 0px; font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;"># sysctl kernel.threads-max=10000</span><br style="margin: 0px; padding: 0px; font-variant-ligatures: normal;"><span style="font-variant-ligatures: normal;">kernel.threads-max = 10000</span><br></span></div>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Memory性能调优工具</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">swapon</span><br>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2;">Linux swapon命令用于激活Linux系统中交换空间,Linux系统的内存管理必须使用交换区来建立虚拟内存</span><br><div><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; background-color: rgb(254, 254, 242);">配置系统的swap交换分区等于或者2倍于物理内存</span><br></span></div>
ulimit
<span style="font-size: 16px; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: common-ligatures; orphans: 2; widows: 2;">ulimit 是一种 </span><a href="http://lib.csdn.net/base/linux" rel="nofollow" target="_blank" style="font-size: 16px; box-sizing: border-box; outline: none; margin: 0px; padding: 0px; text-decoration: none; cursor: pointer; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(103, 149, 181); overflow-wrap: break-word; font-variant-ligatures: common-ligatures; orphans: 2; widows: 2;">Linux</a><span style="font-size: 16px; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: common-ligatures; orphans: 2; widows: 2;"> 系统的内键功能,它具有一套参数集,用于为由它生成的 shell进程及其子进程的资源使用设置限制。</span><br>
<p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: common-ligatures; orphans: 2; widows: 2;"><span style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word;">查看系统用户所有限制值:</span>ulimit -a</p><p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: common-ligatures; orphans: 2; widows: 2;"><span style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word;">设置用户open files(用户可以打开文件的最大数目):</span>ulimit -n 4096。执行该命令非root用户只能设置到4096。想要设置到8192需要sudo权限或者root用户。可解决toomany open file 问题,默认 1024</p><br>
sysctl
<p style="margin: 10px auto; padding: 0px; line-height: 1.5; color: rgb(0, 0, 0); font-size: 13px; font-family: 微软雅黑, PTSans, Arial, sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-variant-ligatures: normal; background-color: rgb(254, 254, 242);">修改/proc/sys/vm/下的系统参数</span>vm.dirty_background_bytes:默认值为0, 触发pdflush后台回写的脏存储器量;</p><p style="margin: 10px auto; padding: 0px; line-height: 1.5; color: rgb(0, 0, 0); font-size: 13px; font-family: 微软雅黑, PTSans, Arial, sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;">vm.dirty_background_ratio:默认值10, 触发pdflush后台回写脏系统存储器百分比;<br style="margin: 0px; padding: 0px;">vm.dirty_bytes:默认值为0,触发一个写入进程开始回写的脏存储器量;<br style="margin: 0px; padding: 0px;">vm.dirty_ratio:默认值为20,触发一个写入进程开始回写的脏系统存储器比例;<br style="margin: 0px; padding: 0px;">vm.dirty_expire_centisecs:默认值为3000,使用pdflush的脏存储器最小时间;<br style="margin: 0px; padding: 0px;">vm.dirty_writeback_centisecs:默认值为500,pdflush活跃时间间隔(0为停用);<br style="margin: 0px; padding: 0px;">vm.min_free_kbytes:默认值为 dynamic,设置期望的空闲存储器量(一些内核自动分配器能消耗它);<br style="margin: 0px; padding: 0px;">vm.overconmmit_memory:默认值为0,0表示利用探索法允许合理的国度分配;1表示一直国度分配;3表示禁止国度分配;<br style="margin: 0px; padding: 0px;">vm.swappiness:默认值为60,相对于页面高速缓存回收更倾向用交换释放存储器的程度;<br style="margin: 0px; padding: 0px;">vm.vfs_cache_pressure:默认值为100,表示回收高速缓存的目录和inode对象的程度。较低的值会保留更多;0意味着从不回收,容器导致存储器耗尽的情况</p><div style="orphans: 2; widows: 2;"><font color="#000000" face="微软雅黑, PTSans, Arial, sans-serif" size="2"><span style="caret-color: rgb(0, 0, 0);">如下修改</span></font></div><div><p style="margin: 10px auto; padding: 0px; line-height: 1.5; color: rgb(0, 0, 0); font-size: 13px; font-family: 微软雅黑, PTSans, Arial, sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-variant-ligatures: normal; background-color: rgb(254, 254, 242);">vm.min_free_kbytes = 1024</span><br style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-variant-ligatures: normal; background-color: rgb(254, 254, 242);"><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-variant-ligatures: normal; background-color: rgb(254, 254, 242);"># sysctl -w vm.min_free_kbytes=2508</span><br style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-variant-ligatures: normal; background-color: rgb(254, 254, 242);"><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-variant-ligatures: normal; background-color: rgb(254, 254, 242);">vm.min_free_kbytes = 2508</span><br></p></div>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">判断性能问题:当一个应用系统的内存资源出现下面的情况时,我们认为需要进行Memory性能调整:页面频繁换进换出;缺少非活动页。例如在使用vmstat命令时发现,memory的cache使用率非常低,而swap的si或者so则有比较高的数据值时,应该警惕内存的性能问题。</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">I/O性能调优工具</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">edquota</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">quoton</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">sysctl</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">boot line:</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">elevator</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">调优场景:系统出现以下情况时,我们认为该系统存在I/O性能问题:系统等待I/O的时间超过50%;一个设备的平均队列长度大于5。我们可以通过诸如vmstat等命令,查看CPU的wa等待时间,以得到系统是否存在I/O性能问题的准确信息。</span><br>
优化方法
<span style="color: rgb(0, 0, 0); font-family: 微软雅黑, PTSans, Arial, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2;">ionice</span><br>
<strong style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">IO</strong><strong style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">调度策略</strong><br><div><strong style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="font-weight: 400; font-variant-ligatures: normal;">ionice将磁盘IO调度分为三类:</span><br></strong></div>
<p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"><strong style="margin: 0px; padding: 0px;">ilde</strong><strong style="margin: 0px; padding: 0px;">:</strong>空闲磁盘调度,该调度策略是在当前系统没有其他进程需要进行磁盘IO时,才能进行磁盘;因此该策略对当前系统的影响基本为0;当然,该调度策略不能带有任何优先级参数;目前,普通用户是可以使用该调度策略(自从内核2.6.25开始)。</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"><strong style="margin: 0px; padding: 0px;">Best effort</strong><strong style="margin: 0px; padding: 0px;">:</strong>是缺省的磁盘IO调度策略;(1)该调度策略可以指定优先级参数(范围是0~7,数值越小,优先级越高);(2)针对处于同一优先级的程序将采round-robin方式;(3)对于best effort调度策略,8个优先级等级可以说明在给定的一个调度窗口中时间片的大小。(4)目前,普调用户(非root用户)是可以使用该调度策略。(5)在内核2.6.26之前,没有设置IO优先级的进程会使用“none”作为调度策略,但是这种策略使得进程看起来像是采用了best effort调度策略,因为其优先级是通过关于cpu nice有关的公式计算得到的:io_priority = (cpu_nice + 20) / 5。(6)在内核2.6.26之后,如果当前系统使用的是CFQ调度器,那么如果进程没有设置IO优先级级别,将采用与内核2.6.26之前版本同样的方式,推到出io优先级级别。</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"><strong style="margin: 0px; padding: 0px;">Real time</strong><strong style="margin: 0px; padding: 0px;">:</strong>实时调度策略,如果设置了该磁盘IO调度策略,则立即访问磁盘,不管系统中其他进程是否有IO。因此使用实时调度策略,需要注意的是,该访问策略可能会使得其他进程处于等待状态。</p><br>
参数说明
<p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"><strong style="margin: 0px; padding: 0px;">参数说明:</strong></p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">-c class :class表示调度策略,其中0 for none, 1 for real time, 2 for best-effort, 3 for idle。</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">-n classdata:classdata表示IO优先级级别,对于best effort和real time,classdata可以设置为0~7。</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">-p pid:指定要查看或设置的进程号或者线程号,如果没有指定pid参数,ionice will run the listed program with the given parameters。</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">-t :忽视设置优先级时产生的错误。</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">COMMAND:表示命令名</p><br>
<p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"><strong style="margin: 0px; padding: 0px;">实例:</strong></p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"># ionice -c 3 -p 89</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">设置进程号为89的进程的调度策略是idle。</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"> </p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"># ionice -c 2 -n 0 bash</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">运行bash,调度策略是best-effort,最高优先级。</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"> </p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"># ionice -p 89 91</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">打印进程号为89和91进程的调度策略和IO优先级。</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"> </p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">#ionice -c3 -p$$</p><p style="margin: 10px auto; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;">将当前的进程(就是shell)磁盘IO调度策略设置为idle类型.</p><br>
<span style="color: rgb(0, 0, 0); font-family: 微软雅黑, PTSans, Arial, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2;"> cgroup</span><br>
<p style="margin: 10px auto; padding: 0px; line-height: 1.5; color: rgb(0, 0, 0); font-size: 13px; font-family: 微软雅黑, PTSans, Arial, sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;">通过cgroup为进程或进程组提供存储设备资源控制机制。一般很少用到,不用考虑。</p><p style="margin: 10px auto; padding: 0px; line-height: 1.5; color: rgb(0, 0, 0); font-size: 13px; font-family: 微软雅黑, PTSans, Arial, sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;"> 可调参数</p><p style="margin: 10px auto; padding: 0px; line-height: 1.5; color: rgb(0, 0, 0); font-size: 13px; font-family: 微软雅黑, PTSans, Arial, sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;"> /sys/block/sda/queue/scheduler:选择I/O调度器策略,是空操作、最后期限、an还是cfq;</p><br>
文件系统调整
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">对于文件系统的调整,有几个公认的准则:将I/O负载相对平均的分配到所有可用的磁盘上;选择合适的文件系统,Linux内核支持reiserfs、ext2、ext3、jfs、xfs等文件系统;</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># mkfs -t reiserfs -j /dev/sdc1</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">文件系统即使在建立后,本身也可以通过命令调优;</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">tune2fs (ext2/ext3)</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">reiserfstune (reiserfs)</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">jfs_tune (jfs)</span><br>
修改I/O调度算法
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Linux已知的I/O调试算法有4种:</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">deadline – Deadline I/O scheduler</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">as – Anticipatory I/O scheduler</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">cfq – Complete Fair Queuing scheduler</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">noop – Noop I/O scheduler</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">可以编辑/etc/yaboot.conf文件修改参数elevator得到。</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># vi /etc/yaboot.conf</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">image=/vmlinuz-2.6.9-11.EL</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">label=linux</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">read-only</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">initrd=/initrd-2.6.9-11.EL.img</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">root=/dev/VolGroup00/LogVol00</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">append=”elevator=cfq rhgb quiet”</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">调整块设备的READAHEAD,调大RA值。</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">[root@overflowuid ~]# blockdev –report</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">RO RA SSZ BSZ StartSec Size Device</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">…</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">rw 256 512 4096 0 71096640 /dev/sdb</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">rw 256 512 4096 32 71094240 /dev/sdb1</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">[root@overflowuid ~]# blockdev –setra 2048 /dev/sdb1</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">[root@overflowuid ~]# blockdev –report</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">RO RA SSZ BSZ StartSec Size Device</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">…</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">rw 2048 512 4096 0 71096640 /dev/sdb</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">rw 2048 512 4096 32 71094240 /dev/sdb1</span><br>
网络性能调优
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">ifconfig</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">iwconfig</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">sysctl</span><br>
调优场景
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">一个应用系统出现如下情况时,我们认为该系统存在网络性能问题:网络接口的吞吐量小于期望值;出现大量的丢包现象;出现大量的冲突现象。</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">性能调整方法</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">1)调整网卡的参数</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># ethtool eth0</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Settings for eth0:</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Supported ports: [ TP ]</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Supported link modes: 10baseT/Half 10baseT/Full</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">100baseT/Half 100baseT/Full</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">1000baseT/Full</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Supports auto-negotiation: Yes</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Advertised link modes: 10baseT/Half 10baseT/Full</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">100baseT/Half 100baseT/Full</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">1000baseT/Full</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Advertised auto-negotiation: Yes</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Speed: 100Mb/s</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Duplex: Half</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Port: Twisted Pair</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">PHYAD: 0</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Transceiver: internal</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Auto-negotiation: on</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Supports Wake-on: d</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Wake-on: d</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Current message level: 0×00000007 (7)</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">Link detected: yes</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><font color="#c41230"><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">#ethtool -s eth0 duplex full</span><br style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">#ifconfig eth0 mtu 9000 up</span></font><br>
<p style="margin-bottom: 10px; padding: 0px; color: rgb(85, 85, 85); font-family: Verdana, "BitStream vera Sans", Tahoma, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2; text-indent: 2em;">在数据传输时,由于IEEE的规定最大的帧规定为1,500比特(主机在早期的半双功网络中),所以需要数传输需要经过 数据的切要 --- 传输 ---数据组合 的过程。而使用的最大帧越小,传输包的量就越大,计算量相应会多,而产生的后果是:</p><p style="margin-bottom: 10px; padding: 0px; color: rgb(85, 85, 85); font-family: Verdana, "BitStream vera Sans", Tahoma, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2; text-indent: 2em;">a:增加主机的计算量,消耗CPU资源;</p><p style="margin-bottom: 10px; padding: 0px; color: rgb(85, 85, 85); font-family: Verdana, "BitStream vera Sans", Tahoma, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2; text-indent: 2em;">b:影响网络传输的速度。</p><p style="margin-bottom: 10px; padding: 0px; color: rgb(85, 85, 85); font-family: Verdana, "BitStream vera Sans", Tahoma, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2; text-indent: 2em;">而使用大帧优点自然也不言而喻 ———— 降低CPU计算量、加快数据传输。<span style="font-family: Arial; font-size: 18px; letter-spacing: -0.05em; text-indent: 2em;">修改MTU值</span><br></p><p style="margin-bottom: 10px; padding: 0px; color: rgb(85, 85, 85); font-family: Verdana, "BitStream vera Sans", Tahoma, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2; text-indent: 2em;">上面啰嗦了一大堆,修改帧大小实际需要的操作就是修改MTU(Maximum Transmission Unit)值,即修改最大传输单元。修改方法如下:</p><h4 style="margin-bottom: 10px; padding: 0px; letter-spacing: -0.05em; font-family: Arial; font-size: 15.6px; color: rgb(0, 136, 0); font-variant-ligatures: normal; orphans: 2; widows: 2; text-indent: 2em;">1、ifconfig命令修改<br style="margin: 0px; padding: 0px;"></h4><p style="margin-bottom: 10px; padding: 0px; color: rgb(85, 85, 85); font-family: Verdana, "BitStream vera Sans", Tahoma, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2; text-indent: 2em;"></p><p style="margin-bottom: 10px; padding: 0px; color: rgb(85, 85, 85); font-family: Verdana, "BitStream vera Sans", Tahoma, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2; text-indent: 2em;"></p><p style="margin-bottom: 10px; padding: 0px; color: rgb(85, 85, 85); font-family: Verdana, "BitStream vera Sans", Tahoma, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2; text-indent: 2em;"></p><pre class="prettyprint linenums lang-bsh" style="margin-top: 5px; margin-bottom: 5px; margin-left: 5px; padding: 0px; background-color: rgb(244, 245, 247); border: 1px dashed rgb(204, 204, 204); overflow: auto; color: rgb(85, 85, 85); font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2; font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Lucida Console", monospace !important; background-position: 3px 3px; background-repeat: no-repeat no-repeat;"><ol class="linenums" style="margin: 20px 30px 20px 35px; padding: 0px;"><li class="L0" style="margin-left: 5px; padding-left: 10px; border-left-width: 3px; border-left-style: solid; border-left-color: rgb(108, 226, 108);"><span class="pln" style="margin: 0px; padding: 0px; color: rgb(0, 0, 0);">ifconfig $</span><span class="pun" style="margin: 0px; padding: 0px; color: rgb(102, 102, 0);">{</span><span class="typ" style="margin: 0px; padding: 0px; color: rgb(102, 0, 102); font-weight: bold;">Interface</span><span class="pun" style="margin: 0px; padding: 0px; color: rgb(102, 102, 0);">}</span><span class="pln" style="margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> mtu $</span><span class="pun" style="margin: 0px; padding: 0px; color: rgb(102, 102, 0);">{</span><span class="pln" style="margin: 0px; padding: 0px; color: rgb(0, 0, 0);">SIZE</span><span class="pun" style="margin: 0px; padding: 0px; color: rgb(102, 102, 0);">}</span><span class="pln" style="margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> up</span></li><li class="L1" style="margin-left: 5px; padding-left: 10px; border-left-width: 3px; border-left-style: solid; border-left-color: rgb(108, 226, 108);"><span class="pln" style="margin: 0px; padding: 0px; color: rgb(0, 0, 0);">ifconfig eth1 mtu </span><span class="lit" style="margin: 0px; padding: 0px; color: rgb(0, 102, 102);">9000</span><span class="pln" style="margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> up</span></li></ol></pre><p style="margin-bottom: 10px; padding: 0px; color: rgb(85, 85, 85); font-family: Verdana, "BitStream vera Sans", Tahoma, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2;"></p><p style="margin-bottom: 10px; padding: 0px; color: rgb(85, 85, 85); font-family: Verdana, "BitStream vera Sans", Tahoma, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2; text-indent: 2em;"></p><p style="margin-bottom: 10px; padding: 0px; color: rgb(85, 85, 85); font-family: Verdana, "BitStream vera Sans", Tahoma, Helvetica, sans-serif; font-size: 12px; font-variant-ligatures: normal; orphans: 2; widows: 2; text-indent: 2em;">这个是最通用的方法,对所有的linux 发行版本都有效。缺点就是重启后失效,需要在开机项中加载</p><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">2)增加网络缓冲区和包的队列。</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># cat /proc/sys/net/ipv4/tcp_mem</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">196608 262144 393216</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># cat /proc/sys/net/core/rmem_default</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">135168</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># cat /proc/sys/net/core/rmem_max</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">131071</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># cat /proc/sys/net/core/wmem_default</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">135168</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># cat /proc/sys/net/core/wmem_max</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">131071</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># cat /proc/sys/net/core/optmem_max</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">20480</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># cat /proc/sys/net/core/netdev_max_backlog</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">300</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># sysctl net.core.rmem_max</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">net.core.rmem_max = 131071</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># sysctl -w net.core.rmem_max=135168</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">net.core.rmem_max = 135168</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">3)调整Webserving</span><br>
<span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># sysctl net.ipv4.tcp_tw_reuse</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">net.ipv4.tcp_tw_reuse = 0</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># sysctl -w net.ipv4.tcp_tw_reuse=1</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">net.ipv4.tcp_tw_reuse = 1</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># sysctl net.ipv4.tcp_tw_recycle</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">net.ipv4.tcp_tw_recycle = 0</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"># sysctl -w net.ipv4.tcp_tw_recycle=1</span><br style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);"><span style="color: rgb(0, 0, 0); font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; font-variant-ligatures: normal; orphans: 2; widows: 2; background-color: rgb(254, 254, 242);">net.ipv4.tcp_tw_recycle = 1</span><br>
<span style="font-size: 16px; box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; font-weight: 700; overflow-wrap: break-word; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;">如何尽量处理TIMEWAIT过多?</span><br>
<p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: normal; orphans: 2; widows: 2;">编辑内核文件/etc/sysctl.conf,加入以下内容:</p><pre style="box-sizing: border-box; outline: 0px; margin-top: 0px; margin-bottom: 24px; padding: 8px; position: relative; font-family: Consolas, Inconsolata, Courier, monospace; white-space: pre-wrap; overflow-wrap: break-word; overflow-x: auto; line-height: 22px; color: rgb(0, 0, 0); font-variant-ligatures: normal; orphans: 2; widows: 2;">net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;<br>net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;<br>net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。<br>net.ipv4.tcp_fin_timeout 修改系默认的 TIMEOUT 时间</pre><p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: normal; orphans: 2; widows: 2;">然后执行 /sbin/sysctl -p 让参数生效.</p><pre style="box-sizing: border-box; outline: 0px; margin-top: 0px; margin-bottom: 24px; padding: 8px; position: relative; font-family: Consolas, Inconsolata, Courier, monospace; white-space: pre-wrap; overflow-wrap: break-word; overflow-x: auto; line-height: 22px; color: rgb(0, 0, 0); font-variant-ligatures: normal; orphans: 2; widows: 2;">/etc/sysctl.conf是一个允许改变正在运行中的Linux系统的接口,它包含一些TCP/IP堆栈和虚拟内存系统的高级选项,修改内核参数永久生效。</pre><p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: normal; orphans: 2; widows: 2;">简单来说,就是</p><p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: normal; orphans: 2; widows: 2;"><font color="#c41230">打开系统的TIMEWAIT重用和快速回收</font></p><p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: normal; orphans: 2; widows: 2;">。</p><p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: normal; orphans: 2; widows: 2;">如果以上配置调优后性能还不理想,可继续修改一下配置:</p><p style="font-size: 16px; box-sizing: border-box; outline: 0px; margin-bottom: 16px; padding: 0px; font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; color: rgb(77, 77, 77); line-height: 26px; overflow-x: auto; overflow-wrap: break-word; font-variant-ligatures: normal; orphans: 2; widows: 2;"> </p><pre style="box-sizing: border-box; outline: 0px; margin-top: 0px; margin-bottom: 24px; padding: 8px; position: relative; font-family: Consolas, Inconsolata, Courier, monospace; white-space: pre-wrap; overflow-wrap: break-word; overflow-x: auto; line-height: 22px; color: rgb(0, 0, 0); font-variant-ligatures: normal; orphans: 2; widows: 2;">vi /etc/sysctl.conf<br>net.ipv4.tcp_keepalive_time = 1200 <br><span style="font-size: 16px; white-space: normal; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: normal;">默认值是7200(2小时)</span><br style="font-size: 16px; white-space: normal; box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: normal;"><span style="font-size: 16px; white-space: normal; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: normal;">当keepalive打开的情况下,TCP发送keepalive消息的频率。(由于目前网络攻击等因素,造成了利用这个进行的攻击很频繁,曾经也有cu的朋友提到过,说如果2边建立了连接,然后不发送任何数据或者rst/fin消息,那么持续的时间是不是就是2小时,空连接攻击? tcp_keepalive_time就是预防此情形的.我个人在做nat服务的时候的修改值为1800秒)</span><br>net.ipv4.ip_local_port_range = 1024 65000 <br>#表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。<br>net.ipv4.tcp_max_syn_backlog = 8192 <br>#表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。<br>net.ipv4.tcp_max_tw_buckets = 5000 <br>#表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。<br>默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于 Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。</pre>
项目上系统参数设置
<div yne-bulb-block="paragraph" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); white-space: pre-wrap; line-height: 1.75;"><span style="font-size: 28px; font-weight: bold;">系统参数</span></div><div yne-bulb-block="paragraph" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); white-space: pre-wrap; line-height: 1.75;"><br></div><div yne-bulb-block="paragraph" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); white-space: pre-wrap; line-height: 1.75;"><span style="color: rgb(89, 89, 89); background-color: rgb(249, 249, 249);">sysctl -a <br><br>net.ipv4.tcp_keepalive_time = 30<br>net.ipv4.tcp_keepalive_intvl = 10</span></div><div yne-bulb-block="paragraph" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); white-space: pre-wrap; line-height: 1.75;"><span style="font-size: 16px; white-space: normal; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;">默认值为75</span><br style="font-size: 16px; white-space: normal; box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="font-size: 16px; white-space: normal; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;">探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒,也就是没有活动的连接将在大约11分钟以后将被丢弃。(对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值,15是个比较合适的值)</span><span style="color: rgb(89, 89, 89); background-color: rgb(249, 249, 249);"><br>net.ipv4.tcp_keepalive_probes = 2<br></span><span style="font-size: 16px; white-space: normal; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;">默认值是9</span><br style="font-size: 16px; white-space: normal; box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="font-size: 16px; white-space: normal; color: rgb(77, 77, 77); font-family: "Microsoft YaHei", "SF Pro Display", Roboto, Noto, Arial, "PingFang SC", sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;">TCP发送keepalive探测以确定该连接已经断开的次数。(注意:保持连接仅在SO_KEEPALIVE套接字选项被打开是才发送.次数默认不需要修改,当然根据情形也可以适当地缩短此值.设置为5比较合适)</span><span style="color: rgb(89, 89, 89); background-color: rgb(249, 249, 249);"><br>net.ipv4.tcp_syncookies=1<br>net.ipv4.tcp_tw_reuse=1<br>net.ipv4.tcp_tw_recycle=1(已废弃)<br>net.ipv4.tcp_fin_timeout = 5(对于本端断开的socket连接,TCP保持在FIN_WAIT_2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒)<br><br>/sbin/sysctl -p</span></div>
Linux代码
<div>#include <sys/types.h></div><div>#include <sys/socket.h></div><div>#include <netinet/tcp.h></div><div> </div><div>int keepAlive = 1; // 开启keepalive属性</div><div>int keepIdle = 1800; // 如该连接在1800秒内没有任何数据往来,则进行探测 </div><div>int keepInterval = 3; // 探测时发包的时间间隔为3秒</div><div>int keepCount = 2; // 探测尝试的次数.如果第1次探测包就收到响应了,则后几次的不再发.</div><div>setsockopt(client_fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&keepAlive, sizeof(keepAlive));</div><div>setsockopt(client_fd, SOL_TCP, TCP_KEEPIDLE, (void *)&keepIdle, sizeof(keepIdle));</div><div>setsockopt(client_fd, SOL_TCP,TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));</div><div>setsockopt(client_fd, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));</div>
内存管理
非连续分配管理方式
基本分页存储管理方式
思想
在分区存储管理中,要把作业放在一个连续的存储区中,因而会产生碎片问题(外部碎片)。尽管通过拼接方式可以解决碎片问题,但代价较高。如果允许将一个作业存放到许多不相邻接的分区中,那么就可以避免拼接,,从而有效解决外部碎片问题。基于这一思想引入了分页存储管理(或称页式存储管理)技术
类型
分页管理
在分页存储管理中,用户作业的地址空间被划分称若干个大小相等的区域,称为页或页面。相应地,将主存的存储空间也分成与页面大小相等的区域,称为块或物理块。在为作业分配存储空间时,总是以块为单位来分配,可以将作业中的任意一页放入主存的任意一块中。
页表
基本地址变换机构
具有快表的地址变换机构
内存抽象:地址空间
无内存抽象存在的问题
<ol><li>用户程序可以访问任意内存,容易破坏操作系统,造成崩溃</li><li>同时运行多个程序特别困难</li></ol>
<ol><li>基址寄存器与界限寄存器可以简单的动态重定位,每个内存地址送到内存之前,都会自动加上基址寄存器的内容。</li><li>交换技术把一个进程完全调入内存,使该进程运行一段时间,然后把它存回磁盘。空闲进程主要存在磁盘上,所以当他们不运行时就不会占用内存。</li></ol>
为什么要有地址空间?
首先直接把物理地址暴露给进程会带来严重问题<br><br><ol><li>如果用户程序可以寻址内存的每个字节,就有很大的可能破坏操作系统,造成系统崩溃</li><li>同时运行多个程序十分困难 地址空间创造了一个新的内存抽象,地址空间是一个进程可用于寻址内存的一套地址的集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其它进程的地址空间。使用基址寄存器和界限器可以实现。</li></ol>
虚拟内存
虚拟内存是现代操作系统普遍使用的一种技术。前面所讲的抽象满足了多进程的要求,但很多情况下,现有内存无法满足仅仅一个大进程的内存要求(比如很多游戏,都是10G+的级别
基本思想
虚拟内存的基本思想是,每个进程有用独立的逻辑地址空间,内存被分为大小相等的多个块,称为页(Page).每个页都是一段连续的地址。对于进程来看,逻辑上貌似有很多内存空间,其中一部分对应物理内存上的一块(称为页框,通常页和页框大小相等),还有一些没加载在内存中的对应在硬盘上。<br>虚拟内存实际上可以比物理内存大。当访问虚拟内存时,会通过MMU(内存管理单元)去匹配对应的物理地址,而如果虚拟内存的页并不存在于物理内存中,会产生缺页中断,从磁盘中取得缺的页放入内存,如果内存已满,还会根据某种算法将磁盘中的页换出。<br><br>而虚拟内存和物理内存的匹配是通过页表实现,页表存在MMU中,页表中每个项通常为32位,既4byte,除了存储虚拟地址和页框地址之外,还会存储一些标志位,比如是否缺页,是否修改过,写保护等。可以把MMU想象成一个接收虚拟地址项返回物理地址的方法。<br><br>因为页表中每个条目是4字节,现在的32位操作系统虚拟地址空间会是2的32次方,即使每页分为4K,也需要2的20次方 * 4字节 = 4M的空间,为每个进程建立一个4M的页表并不明智。因此在页表的概念上进行推广,产生二级页表,二级页表每个对应4M的虚拟地址,而一级页表去索引这些二级页表,因此32位的系统需要1024个二级页表,虽然页表条目没有减少,但内存中可以仅仅存放需要使用的二级页表和一级页表,大大减少了内存的使用。<br><br>引入多级页表的原因是避免把全部页表一直存在内存中。<br>链接:https://www.jianshu.com/p/2b11639905ec<br>
虚拟地址和物理地址匹配规则
虚拟页号可用做页表的索引,以找到该虚拟页面对应页表项。由页表项可以找到页框号。然后把页框号拼接到偏移量的高位端,以替换虚拟页号,形成送往内存的物理地址。<br><br>页表的目的是把虚拟页面映射为页框,从数学的角度来说,页表是一个函数,它的参数是,虚拟页号,结果是物理页框号。通过这个函数可以把虚拟地址中的虚拟页面域替换为页框域,从而形成物理地址。<br>
页面置换算法
最优页面置换算法(Optimal Page Replacement Algorithm)
最近最少使用页面置换算法(Least Recently Used)
最近未使用页面置换算法(Not Recently Used Replacement Algorithm)
先进先出的页面置换算法(First-In First-Out Page Replacement Algorithm)
第二次机会页面置换算法(Second Chance Page Replacement Algorithm)
时钟替换算法(Clock Page Replacement Algorithm)
算法比较
子主题
分页系统中的设计问题
在任何分页式系统中,都需要考虑两个主要的问题:虚拟地址到到物理地址的映射必须非常快;如果虚拟地址空间很大,页表也会很大。
局部分分配策略与全局分配策略
负载控制 , 即使使用了最优的页面置换算法,最理想的全局分配。当进程组合的工作集超出内存容量时,就可能发生颠簸。这时只能根据进程的特性(IO 密集 or CPU 密集)将进程交换到磁盘上。
页面大小 的确定不存在全局最优的结果,小页面减少页面内内存浪费,但是小页面,意味着更大的页表,更多的计算转换时间。现在一般的页面大小是 4KB 或 8KB
内核空间
页(page)是内核的内存管理的基本单位
struct page {<br> page_flags_t flags; 页标志符<br> atomic_t _count; 页引用计数<br> atomic_t _mapcount; 页映射计数<br> unsigned long private; 私有数据指针<br> struct address_space *mapping; 该页所在地址空间描述结构指针,用于内容为文件的页帧<br> pgoff_t index; 该页描述结构在地址空间radix树page_tree中的对象索引号即页号<br> struct list_head lru; 最近最久未使用struct slab结构指针链表头变量<br> void *virtual; 页虚拟地址<br>};
flags:页标志包含是不是脏的,是否被锁定等等,每一位单独表示一种状态,可同时表示出32种不同状态,定义在<linux/page-flags.h><br><br>_count:计数值为-1表示未被使用。<br><br>virtual:页在虚拟内存中的地址,对于不能永久映射到内核空间的内存(比如高端内存),该值为NULL;需要事必须动态映射这些内存。<br>
用户空间
用户空间中进程的内存,往往称为进程地址空间。<br><br>Linux采用虚拟内存技术。进程的内存空间只是虚拟内存(或者叫作逻辑内存),而程序的运行需要的是实实在在的内存,即物理内存(RAM)。在必要时,操作系统会将程序运行中申请的内存(虚拟内存)映射到RAM,让进程能够使用物理内存。<br>
地址空间
每个进程都有一个32位或64位的地址空间,取决于体系结构。 一个进程的地址空间与另一个进程的地址空间即使有相同的内存地址,也彼此互不相干,对于这种共享地址空间的进程称之为线程。一个进程可寻址4GB的虚拟内存(32位地址空间中),但不是所有虚拟地址都有权访问。对于进程可访问的地址空间称为内存区域。每个内存区域都具有对相关进程的可读、可写、可执行属性等相关权限设置。<br><br>内存区域可包含的对象:<br><br>代码段(text section): 可执行文件代码<br><br>数据段(data section): 可执行文件的已初始化全局变量(静态分配的变量和全局变量)。<br><br>bss段:程序中未初始化的全局变量,零页映射(页面的信息全部为0值)。<br><br>进程用户空间栈的零页映射(进程的内核栈独立存在并由内核维护)<br><br>每一个诸如C库或动态连接程序等共享库的代码段、数据段和bss也会被载入进程的地址空间<br><br>任何内存映射文件<br><br>任何共享内存段<br><br>任何匿名的内存映射(比如由malloc()分配的内存)<br><br>这些内存区域不能相互覆盖,每一个进程都有不同的内存片段。<br>
内存描述符
内存描述符由mm_struct结构体表示
struct mm_struct {<br> struct vm_area_struct *mmap;<br> rb_root_t mm_rb;<br> ...<br> atomic_t mm_users;<br> atomic_t mm_count;<br><br> struct list_head mmlist;<br> ...<br>};
mm_users:代表正在使用该地址的进程数目,当该值为0时mm_count也变为0;<br><br>mm_count: 代表mm_struct的主引用计数,当该值为0说明没有任何指向该mm_struct结构体的引用,结构体会被撤销。<br><br>mmap和mm_rb:描述的对象都是相同的<br><br>mmap以链表形式存放, 利于高效地遍历所有元素<br><br>mm_rb以红黑树形式存放,适合搜索指定元素<br><br>mmlist:所有的mm_struct结构体都通过mmlist连接在一个双向链表中,该链表的首元素是init_mm内存描述符,它代表init进程的地址空间。<br><br>在进程的进程描述符(<linux/sched.h>中定义的task_struct结构体)中,mm域记录该进程使用的内存描述符。故current->mm代表当前进程的内存描述符。<br><br>fork()函数 利用copy_mm函数复制父进程的内存描述符,子进程中的mm_struct结构体通过allcote_mm()从高速缓存中分配得到。通常,每个进程都有唯一的mm_struct结构体,即唯一的进程地址空间。<br><br>当子进程与父进程是共享地址空间,可调用clone(),那么不再调用allcote_mm(),而是仅仅是将mm域指向父进程的mm,即 tsk->mm = current->mm。<br><br>相反地,撤销内存是exit_mm()函数,该函数会进行常规的撤销工作,更新一些统计量。<br><br>内核线程<br><br>没有进程地址空间,即内核线程对应的进程描述符中mm=NULL<br><br>内核线程直接使用前一个进程的内存描述符,仅仅使用地址空间中和内核内存相关的信息<br>
页表
应用程序操作的对象时映射到物理内存之上的虚拟内存,而处理器直接操作的是物理内存。故应用程序访问一个虚拟地址时,需要将虚拟地址转换为物理地址,然后处理器才能解析地址访问请求,这个转换工作通过查询页表完成。<br>
Linux使用三级页表完成地址转换。<br><br><ol><li>顶级页表:页全局目录(PGD),指向二级页目录;</li><li>二级页表:中间页目录(PMD),指向PTE中的表项;</li><li>最后一级:页表(PTE),指向物理页面。</li></ol><br>多数体系结构,搜索页表工作由硬件完成。每个进程都有自己的页表(线程会共享页表)。为了加快搜索,实现了翻译后缓冲器(TLB),作为将虚拟地址映射到物理地址的硬件缓存。还有写时拷贝方式共享页表,当fork()时,父子进程共享页表,只有当子进程或父进程试图修改特定页表项时,内核才创建该页表项的新拷贝,之后父子进程不再共享该页表项。可见,利用共享页表可以消除fork()操作中页表拷贝所带来的消耗。<br>
进程与内存
所有进程都必须占用一定数量的内存,这些内存用来存放从磁盘载入的程序代码,或存放来自用户输入的数据等。内存可以提前静态分配和统一回收,也可以按需动态分配和回收。<br><br>对于普通进程对应的内存空间包含5种不同的数据区:<br><ol><li>代码段</li><li>数据段</li><li>BSS段</li><li>堆:动态分配的内存段,大小不固定,可动态扩张(malloc等函数分配内存),或动态缩减(free等函数释放);</li><li>栈:存放临时创建的局部变量;</li></ol>
0 条评论
下一页