网站运营推广公司,如何让百度能查到自己,苏州知名网站制作开发,佛山市外贸网站建设Sysctl命令用来配置与显示在/proc/sys目录中的内核参数#xff0e;如果想使参数长期保存#xff0c;可以通过编辑/etc/sysctl.conf文件来实现。 命令格式#xff1a;sysctl [-n] [-e]-w # 临时改变某个指定参数的值#xff0c;如sysctl -w net.ipv4.ip_forward1-a # 显示…Sysctl命令用来配置与显示在/proc/sys目录中的内核参数如果想使参数长期保存可以通过编辑/etc/sysctl.conf文件来实现。 命令格式 sysctl [-n] [-e] -w # 临时改变某个指定参数的值如sysctl -w net.ipv4.ip_forward1 -a # 显示所有的系统参数 -p # 从指定的文件加载系统参数,默认从/etc/sysctl.conf 文件中加载 # echo 1 /proc/sys/net/ipv4/ip_forward # sysctl -w net.ipv4.ip_forward1 以上两种方法都可能立即开启路由功能临时修改重启失效 一丶CPU和中断调优
SMPsymmetrical mulit-processing对称多处理器在对称多处理器系统中所有处理器的地位都是相同的所有的资源特别是存储器、中断及I/O空间都具有相同的可访问性消除了结构上的障碍NUMANon Uniform Memory Access Architecture非一致性内存访问是一种用于多处理器的电脑记忆体设计内存访问时间取决于处理器的内存位置。 在NUMA下处理器访问它自己的本地存储器的速度比非本地存储器存储器的地方到另一个处理器之间共享的处理器或存储器快一些CPU亲缘性分为软亲缘性和硬亲缘性Linux 内核进程调度器天生就具有CPU 软亲缘性soft affinity这意味着进程通常不会在处理器之间频繁迁移。但不代表不会进行小范围的迁移。CPU 硬亲缘性是指通过Linux提供的相关CPU亲缘性设置接口显示的指定某个进程固定的某个处理器上运行。可以通过taskset或者glibc库中的sched_getaffinity接口设置。IO设备和进程之间的数据传送方式主要有4种程序直接控制方式、中断控制方式、DMA方式和通道方式。对于Linux系统而言第2,3种IO控制方式是主流采用的通道控制方式虽然更高效但是由于需要添加专门的通道协处理器故而成本较高常用于专用场景程序控制方式又被称为“忙等”模式即当要在内存和IO设备之间进行信息传输时由CPU向相应的设备发出命令由设备控制器控制IO设备进行实际操作。在IO设备工作时CPU执行一段循环测试程序不断测试IO设备的完成状况根据完成状况决定下一步操作。在此期间CPU只能等待IO设备完成所有的数据传输CPU和设备只能串行工作并不能进行其他操作。 中断控制方式CPU向相应的IO设备发出读写命令后不必等待而转向执行其他进程由设备控制器控制IO设备完成所有的实际操作然后当前进程放弃对CPU的占用进入休眠等待状态。IO设备完成单次数据传输并会主动出发一次中断信号单次传输数据量是设备控制器的数据缓冲寄存器的容量如磁盘单次读取容量便是一个扇区如果一次要读入一个磁盘块的大小数据则需要中断2次…通知CPU本次IO完成然后CPU会将控制权转向中断处理程序让其对此情况作出相应反应DMAdirect memory access)工作方式当某一进程提出一次单次大批量数据请求则首先CPU规划好这批数据在进程的虚拟空间的位置并事先完成虚拟内存到实际内存的映射关系虚拟内存那端肯定是连续的堆空间而实际内存这段操作系统一般也会尽可能在DMA区中划分出连续的实际内存空间以匹配然后CPU将规划好的内存起始地址和size发送给DMA控制器中的内存地址寄存器和size计数器然后由DMA控制器驱动硬盘驱动程序完成本次全部的IO请求直到输入完成后DMA控制器才发出中断信号告知CPU激活中断程序完成中断处理。通道控制方式便是引入一个功能较为简单的协处理机它可以接受CPU发来的IO命令通道作为处理机也有自己的一套指令集可以独立执行通道程序对IO设备进行控制。通道的引入CPU可以专心计算而把IO任务完全交给通道完成二者各负其责。二者分工使得计算和IO操作可以并行即CPU和设备并行工作从而提高资源的利用率
IRQInterrupt Request中断请求IRQ的作用就是在我们所用的电脑中执行硬件中断请求的动作比如我们需要读取硬盘中的一段数据时当数据读取完毕硬盘就通过IRQ来通知系统相应的数据已经写到指定的内存中了ISR中断服务路由中断向量是指早期的微机系统中将由硬件产生的中断标识码当中断发生后CPU就根据中断向量表来决定应该跳转到哪里大异常内存中未找到数据需要到磁盘查找小异常内存中未找到数据但在共享内存中存在可以直接在共享内存中查找Buffer缓冲区是系统两端处理速度平衡从长时间尺度上看时使用的。它的引入是为了减小短期内突发I/O的影响起到流量整形的作用。比如生产者——消费者问题他们产生和消耗资源的速度大体接近加一个buffer可以抵消掉资源刚产生/消耗时的突然变化。Cache缓存则是系统两端处理速度不匹配时的一种折衷策略。因为CPU和memory之间的速度差异越来越大所以人们充分利用数据的局部性locality特征通过使用存储系统分级memory hierarchy的策略来减小这种差异带来的影响。调优isolcpus2,3 #调整参数系统启动后将不使用CPU2和3参数在/etc/grup.conf文件中rootLABEL/后面添加isolcpuscpu号列表cpu号从0开始多个cpu号之间用“,”分隔taskset -pc cpu 列表 pid #将进程绑定到cpu例taskset -pc 1,2 pidps axo pid,psr #查看进程运行在第几颗CPUcat /proc/interraps #查看中断对应的CPUecho “cpu” /proc/irq/中断号/smp_affinity #绑定中断到某CPU二丶进程
知识简介进程分为实时进程和普通进程实时进程具有一定程度上的紧迫性要求对外部事件做出非常快的响应而普通进程则没有这种限制。所以通常实时进程要比普通进程优先运行实时进程的优先级为1-99越大优先级越高调度策略如下1SCHED_FIFO 实时调度策略先到先服务一直运行直到有更高优先级任务到达或自己放弃2SCHED_RR 实时调度策略时间片轮转进程的时间片用完系统将重新分配时间片并置于就绪队列尾普通进程的优先级为100-139越小优先级越高调度策略如下1SCHED_OTHER 分时调度策略当实时进程准备就绪后如果当前cpu正在运行非实时进程则实时进程立即抢占非实时进程调优nice -n num CMD #调整nice值-n范围-20到19越小越容易执行内核会自动调整renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]-p pid pid 的例如renice 15 785-g pgrp 组的-u user 用户的
chrt -p -rrr策略优先级 pid #调整进程调度策略例chrt -p -f 10 1234 修改调度策略为SCHED_FIFO,并且优先级为10三丶内存更加详细的介绍可以看https://blog.csdn.net/Celeste7777/article/details/49560401linux 系统中内存地址分为虚拟地址和物理地址虚拟地址必须通过mmu映射成物理地址。为了完成虚拟地址到物理地址的映射linux内核中必须为每一个用户态进程维护一个页目录和相应的页表项。一般系统中页表中一页大小为4K利用getconf PAGESIZE可以获取系统中页大小。Zone的buddy linux伙伴系统为了将系统中的内存页做相应的管理linux内核将系统中内存为分为不同的nodezone. 系统将不同cpu访问速率的内存归纳为不同的node.zone表示同一个node不同内存区域一般分问DMA NORMAL HIGHMEM.为了连续分配内存页创建Slab Allocator主要管理小内存分配bdflush刷写流程bioblock io buffer 调用bdflushio scheduler 排序device driver驱动写入到diskkswapd内核线程用来处理页面的交换它可以在内存不足时将一些进程的页面交换到swap空间之中。PAE物理地址扩展用于32位扩展寻址即在地址总线外加四根线回写就是先写到内存在写到磁盘通写就是写到磁盘之后返回完成oom_killer它会在系统内存耗尽的情况下启用自己算法有选择性的kill 掉一些进程在x86_32位Linux系统内存中0-3G为用户空间3G~4G为内核空间内核空间分为3部分ZONE_DMAZONE_NORMALZONE_HIGHMEME。 ZONE_DMA0-16M直接内存访问。该区域的物理页面专门供I/O设备的DMA使用。之所以需要单独管理DMA的物理页面是因为DMA使用物理地址访问内存不经过MMU并且需要连续的缓冲区所以为了能够提供物理上连续的缓冲区必须从物理地址空间专门划分一段区域用于DMA。这部分的数据可以直接访问目的在于加快磁盘和内存之间交换数据数据不需要经过总线流向CPU的PC寄存器再流向物理内存直接通过总线就可到达物理内存。 ZONR_NORMAL16M-896M内核最重要的部分该区域的物理页面是内核能够直接使用的。 ZONE_HIGHMEM896M-结束共128M高端内存。主要用于32位Linux系统中映射高于1G的物理内存。64位不需要高端内存。 调优更加详细地调优可以看:https://blog.csdn.net/jiajiren11/article/details/78822171/proc/sys/vm/overcommit_memory0默认设置内核执行启发式的过量使用处理1内核执行总是过量使用处理使用这个值会增大内存超载的可能性2设置内存使用量等于swap的大小RAM*overcommit_ratio的值。如果希望减小内存的过度使用这个值是最安全的
/proc/sys/vm/overcommit_ratio #默认值是50用于虚拟内存的物理内存的百分比/proc/sys/vm/max_map_count #运行单个进程使用的最大内存防止oom/proc/sys/vm/nr_hugepages #允许使用的大页面4M数/proc/sys/vm/page-cluster #一次清到swap上的页面数量作为幂指数的值默认为3意味着可转移2^38个页面到swap/proc/sys/vm/drop_caches #01表示清空页缓存2表示清空inode和目录树缓存3清空所有的缓存记得先sync/proc/sys/vm/dirty_ratio #单个进程脏页达到的百分比之后启动刷写线程/proc/sys/vm/dirty_background_ratio #整个系统脏页达到百分比之后启动刷写线程/proc/sys/vm/dirty_expire_centisecs #脏数据最多存在多长时间后启动刷写线程/proc/sys/vm/dirty_writeback_centisecs #每隔多长时间启动刷写线程/proc/sys/vm/swappiness #是否使用swap分区及使用的比例。值越大内核会越倾向于使用swap。如果设置为0内核只有在空闲的和基于文件的内存页数量小于内存域的高水位线应该指的是watermark[high]时才开始swap/proc/sys/vm/panic_on_oom0内核会杀死内存占用过多的进程。通常杀死内存占用最多的进程系统就会恢复。1在发生OOM时内核会panic。然而如果一个进程通过内存策略或进程绑定限制了可以使用的节点并且这些节点的内存已经耗尽oom-killer可能会杀死一个进程来释放内存。在这种情况下内核不会panic因为其他节点的内存可能还有空闲这意味着整个系统的内存状况还没有处于崩溃状态。2在发生OOM时总是会强制panic即使在上面讨论的情况下也一样。即使在memory cgroup限制下发生的OOM整个系统也会panic。
进程的oom值可在/proc/pid/oom_adj 进行调整-17不杀越大越容易被杀四丶io调度io调度的四种调度策略1) NOOPNo Operation。该算法实现了最最简单的FIFO队列所有IO请求大致按照先来后到的顺序进行操作。之所以说“大致”原因是NOOP在FIFO的基础上还做了相邻IO请求的合并并不是完完全全按照先进先出的规则满足IO请求。NOOP假定I/O请求由驱动程序或者设备做了优化或者重排了顺序(就像一个智能控制器完成的工作那样)。在有些SAN环境下这个选择可能是最好选择。Noop 对于 IO 不那么操心对所有的 IO请求都用 FIFO 队列形式处理默认认为 IO 不会存在性能问题。这也使得 CPU 也不用那么操心。当然对于复杂一点的应用类型使用这个调度器用户自己就会非常操心。 2) Deadline scheduler DEADLINE在CFQ的基础上解决了IO请求饿死的极端情况。除了CFQ本身具有的IO排序队列之外DEADLINE额外分别为读IO和写IO提供了FIFO队列。读FIFO队列的最大等待时间为500ms写FIFO队列的最大等待时间为5s。FIFO队列内的IO请求优先级要比CFQ队列中的高而读FIFO队列的优先级又比写FIFO队列的优先级高。优先级可以表示如下 FIFO(Read) FIFO(Write) CFQ deadline 算法保证对于既定的 IO 请求以最小的延迟时间从这一点理解对于 DSS 应用应该会是很适合的。 3) Anticipatory scheduler 不常用CFQ和DEADLINE考虑的焦点在于满足零散IO请求上。对于连续的IO请求比如顺序读并没有做优化。为了满足随机IO和顺序IO混合的场景Linux还支持ANTICIPATORY调度算法。ANTICIPATORY的在DEADLINE的基础上为每个读IO都设置了6ms 的等待时间窗口。如果在这6ms内OS收到了相邻位置的读IO请求就可以立即满足。Anticipatory scheduleras) 曾经一度是 Linux 2.6 Kernel 的 IO scheduler 。Anticipatory 的中文含义是”预料的, 预想的”, 这个词的确揭示了这个算法的特点简单的说有个 IO 发生的时候如果又有进程请求 IO 操作则将产生一个默认的 6 毫秒猜测时间猜测下一个 进程请求 IO 是要干什么的。这对于随即读取会造成比较大的延时对数据库应用很糟糕而对于 Web Server 等则会表现的不错。这个算法也可以简单理解为面向低速磁盘的因为那个”猜测”实际上的目的是为了减少磁头移动时间。 4CFQCompletely Fair Queuing 完全公平队列该算法的特点是按照IO请求的地址进行排序而不是按照先来后到的顺序来进行响应。 在传统的SAS盘上磁盘寻道花去了绝大多数的IO响应时间。CFQ的出发点是对IO地址进行排序以尽量少的磁盘旋转次数来满足尽可能多的IO请求。在CFQ算法下SAS盘的吞吐量大大提高了。但是相比于NOOP的缺点是先来的IO请求并不一定能被满足可能会出现饿死的情况。 cfq 在 2.6.18 取代了 Anticipatory scheduler 成为 Linux Kernel 默认的 IO scheduler 。cfq 对每个进程维护一个 IO 队列各个进程发来的 IO 请求会被 cfq 以轮循方式处理。也就是对每一个 IO 请求都是公平的。这使得 cfq 很适合离散读的应用(eg: OLTP DB)。我所知道的企业级 Linux 发行版中SuSE Linux 好像是最先默认用 cfq 的. cfq的调度优先类分为三种ilde空闲磁盘调度该调度策略是在当前系统没有其他进程需要进行磁盘IO时才能进行磁盘因此该策略对当前系统的影响基本为0当然该调度策略不能带有任何优先级参数目前普通用户是可以使用该调度策略自从内核2.6.25开始。
Best effort是缺省的磁盘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优先级级别。
Real time实时调度策略如果设置了该磁盘IO调度策略则立即访问磁盘不管系统中其他进程是否有IO。因此使用实时调度策略需要注意的是该访问策略可能会使得其他进程处于等待状态调优 cat /sys/block/sda/queue/scheduler echo “cfq” /sys/block/sda/queue/scheduler ionice [[-c class] [-n classdata] [-t]] -p PID [PID]…ionice [-c class] [-n classdata] [-t] COMMAND [ARG]…-c class class表示调度策略其中0 none, 1 real time, 2 best-effort, 3idle。-n classdataclassdata表示IO优先级级别对于best effort和real timeclassdata可以设置为0~7。-p pid指定要查看或设置的进程号或者线程号如果没有指定pid参数ionice will run the listed program with the given parameters。-t 忽视设置优先级时产生的错误。COMMAND表示命令名总结: 1 CFQ和DEADLINE考虑的焦点在于满足零散IO请求上。对于连续的IO请求比如顺序读并没有做优化。为了满足随机IO和顺序IO混合的场景Linux还支持ANTICIPATORY调度算法。ANTICIPATORY的在DEADLINE的基础上为每个读IO都设置了6ms的等待时间窗口。如果在这6ms内OS收到了相邻位置的读IO请求就可以立即满足。 IO调度器算法的选择既取决于硬件特征也取决于应用场景。 在传统的SAS盘上CFQ、DEADLINE、ANTICIPATORY都是不错的选择对于专属的数据库服务器DEADLINE的吞吐量和响应时间都表现良好。然而在新兴的固态硬盘比如SSD、Fusion IO上最简单的NOOP反而可能是最好的算法因为其他三个算法的优化是基于缩短寻道时间的而固态硬盘没有所谓的寻道时间且IO响应时间非常短。 2 对于数据库应用, Anticipatory Scheduler 的表现是最差的。Deadline 在 DSS 环境表现比 cfq 更好一点而 cfq 综合来看表现更好一些。这也难怪 RHEL 4 默认的 IO 调度器设置为 cfq. 而 RHEL 4 比 RHEL 3整体 IO 改进还是不小的。 五丶网络调优参数路径文件 描述 默认值 优化值 /proc/sys/net/core/rmem_default 默认的TCP数据接收窗口大小字节。 229376 256960 /proc/sys/net/core/rmem_max 最大的TCP数据接收窗口字节。 131071 513920 /proc/sys/net/core/wmem_default 默认的TCP数据发送窗口大小字节。 229376 256960 /proc/sys/net/core/wmem_max 最大的TCP数据发送窗口字节。 131071 513920 /proc/sys/net/core/netdev_max_backlog 在每个网络接口接收数据包的速率比内核处理这些包的速率快时允许送到队列的数据包的最大数目。 1000 2000 /proc/sys/net/core/somaxconn 定义了系统中每一个端口最大的监听队列的长度这是个全局的参数。 128 2048 /proc/sys/net/core/optmem_max 表示每个套接字所允许的最大缓冲区的大小。 20480 81920 /proc/sys/net/ipv4/tcp_mem 确定TCP栈应该如何反映内存使用每个值的单位都是内存页通常是4KB。第一个值是内存使用的下限第二个值是内存压力模式开始对缓冲区使用应用压力的上限第三个值是内存使用的上限。在这个层次上可以将报文丢弃从而减少对内存的使用。对于较大的BDP可以增大这些值注意其单位是内存页而不是字节。 94011 125351 188022 131072 262144 524288 /proc/sys/net/ipv4/tcp_rmem 为自动调优定义socket使用的内存。第一个值是为socket接收缓冲区分配的最少字节数第二个值是默认值该值会被rmem_default覆盖缓冲区在系统负载不重的情况下可以增长到这个值第三个值是接收缓冲区空间的最大字节数该值会被rmem_max覆盖。 4096 87380 4011232 8760 256960 4088000 /proc/sys/net/ipv4/tcp_wmem 为自动调优定义socket使用的内存。第一个值是为socket发送缓冲区分配的最少字节数第二个值是默认值该值会被wmem_default覆盖缓冲区在系统负载不重的情况下可以增长到这个值第三个值是发送缓冲区空间的最大字节数该值会被wmem_max覆盖。 4096 16384 4011232 8760 256960 4088000 /proc/sys/net/ipv4/tcp_keepalive_time TCP发送keepalive探测消息的间隔时间秒用于确认TCP连接是否有效。 7200 1800 /proc/sys/net/ipv4/tcp_keepalive_intvl 探测消息未获得响应时重发该消息的间隔时间秒。 75 30 /proc/sys/net/ipv4/tcp_keepalive_probes 在认定TCP连接失效之前最多发送多少个keepalive探测消息。 9 3 /proc/sys/net/ipv4/tcp_sack 启用有选择的应答1表示启用通过有选择地应答乱序接收到的报文来提高性能让发送者只发送丢失的报文段对于广域网通信来说这个选项应该启用但是会增加对CPU的占用。 1 1 /proc/sys/net/ipv4/tcp_fack 启用转发应答可以进行有选择应答SACK从而减少拥塞情况的发生这个选项也应该启用。 1 1 /proc/sys/net/ipv4/tcp_timestamps TCP时间戳会在TCP包头增加12个字节以一种比重发超时更精确的方法参考RFC 1323来启用对RTT 的计算为实现更好的性能应该启用这个选项。 1 1 /proc/sys/net/ipv4/tcp_window_scaling 启用RFC 1323定义的window scaling要支持超过64KB的TCP窗口必须启用该值1表示启用TCP窗口最大至1GBTCP连接双方都启用时才生效。 1 1 /proc/sys/net/ipv4/tcp_syncookies 表示是否打开TCP同步标签syncookie内核必须打开了CONFIG_SYN_COOKIES项进行编译同步标签可以防止一个套接字在有过多试图连接到达时引起过载。 1 1 /proc/sys/net/ipv4/tcp_tw_reuse 表示是否允许将处于TIME-WAIT状态的socketTIME-WAIT的端口用于新的TCP连接 。 0 1 /proc/sys/net/ipv4/tcp_tw_recycle 能够更快地回收TIME-WAIT套接字。 0 1 /proc/sys/net/ipv4/tcp_fin_timeout 对于本端断开的socket连接TCP保持在FIN-WAIT-2状态的时间秒。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。 60 30 /proc/sys/net/ipv4/ip_local_port_range 表示TCP/UDP协议允许使用的本地端口号 32768 61000 1024 65000 /proc/sys/net/ipv4/tcp_max_syn_backlog 对于还未获得对方确认的连接请求可保存在队列中的最大数目。如果服务器经常出现过载可以尝试增加这个数字。 2048 2048 /proc/sys/net/ipv4/tcp_max_tw_bucket 处于timewait的连接数 /proc/sys/net/ipv4/tcp_synack_retries 第二次握手的重发数 忙时设为1或0 /proc/sys/net/ipv4/tcp_syn_retires 服务器连接客户端时第一次握手重发数 /proc/sys/net/ipv4/tcp_max_orphans tcp套接字请求到达还未来的及监理句柄允许的最大值可防DOS攻击 /proc/sys/net/ipv4/tcp_fin_timeout 四次断开第二阶段的超时时间FIN_WAIT_2 /proc/sys/net/ipv4/tcp_low_latency 允许TCP/IP栈适应在高吞吐量情况下低延时的情况这个选项应该禁用。 0 /proc/sys/net/ipv4/tcp_westwood 启用发送者端的拥塞控制算法它可以维护对吞吐量的评估并试图对带宽的整体利用情况进行优化对于WAN 通信来说应该启用这个选项。 0 /proc/sys/net/ipv4/tcp_bic 为快速长距离网络启用Binary Increase Congestion这样可以更好地利用以GB速度进行操作的链接对于WAN通信应该启用这个选项。 1 六丶进程间通信/proc/sys/kernel/msgmax #单个消息最大值字节/proc/sys/kernel/msgmnb #队列最大值字节单个队列可多个消息/proc/sys/kernel/msgmni #最大队列数/proc/sys/kernel/shmall #共享内存总量/proc/sys/kernel/shmmax #共享内存片上限单个大小/proc/sys/kernel/shmmni #共享内存片数量七丶其他/proc/sys/kernel/threads-max #内核一次可以创建的线程数/proc/sys/fs/file-max #内核打开的文件最大数查看服务器运行状态的常用命令sar、tsar、dstat、top、htop、ifotp、lsof、glances、vmstat、ss、iostat、vmstat、dstat、netstat、等好多