Linux系统调优

  1. Linux核心参数都是放置在/proc下面;系统的参数都是放置在/proc/sys
  2. swap最好放置在运行最快的硬盘上面,但是swap并能取代ram,因为并有I/O上面的损耗,所以优先考虑检验内存没有泄露以及增加内存提高性能;另外swap退而求其次最好能够在一个单独的分区上面,或者是拥有多个swap分区,这样可以让linux系统能够多线程并行写到硬盘上面;swap配置大小应该是内存的两倍,而且如果内存增大了,应该手动调整交换区的大小;
  3. 参数调优一定是要一个一个的来看效果如何;不要一次批量进行调整;对于系统参数的修改,可以直接在vi对应的参数存放文件进行修改,也可以直接通过sysctl -w [parameter] = value来进行设置,直接生效;还可以通过sysctl [parameter]进行查看;注意parameter需要添加诸如"vm."之类的目录层级前缀,即它在/proc/sys下面的的目录;比如/proc/sys/net/core下面的busy_poll,如果想要查看就是:sysctl net.core.busy_poll;
  4. dirty_backgroud_radio参数用于调整合适内存中写数据flush到硬盘中,Linux的系统的写入硬盘操作都不是直接操作硬盘,而是放置到内存的区域内,等到了一定大小再进行写入(这也是ext3的优势,拥有日志功能,即使突然crash,可以根据日志来进行保证数据一致性),这个参数就是判断,当pdflush进程(daemon守护进程)所占用的内存量达到一定程度的时候,将会把数据写入到硬盘中(外存);还有一个参数是dirty_radio,当第一道屏障是background,当进程空闲的时候进行如此操作,第二道屏障就是dirty_radio,当写入量井喷,background方式已经无法及时进行处理,内存占用量很大(高于dirty_background_radio),这个时候就需要对I/O进行阻塞,保证当前的dirty page完全写入到内存中,防止内存过大;pdflush进程的作用其实是为了避免频繁写硬盘,比如你的硬盘写入量很大,避免频繁操作,就需要将这个值定的比较高,默认是10(10%),那么可能就需要调整到20%;
  5. 说道pdflush(Page dirty flush)其实还有另外一个监控点;就是周期性将数据写入到硬盘中,避免dirty page长期占据内存,dirty_expire_centisecs参数进行控制;针对pdflush的参数都是放置在/proc/sys/vm下面;
  6. ext2和ext3的核心区别在于后者提供了日志机制;ext4是ext3的升级,但是有很多性能的提升,ext4文件系统最大(1EB~10(6)B以及文件最大(16TB)都比前者ext3(文件系统16TB,文件2TB)大出很多;ext4子目录数量不再有限制(ext3限制为32000个);还有一点就是ext4允许关闭日志模式;
  7. Linux I/O elevator是Linux的硬盘系统处理机制,对于请求处理好像升降机(电梯)一样,对于要处理的数据放到电梯里面,下行入库(存放到硬盘/硬盘缓存);
  8. 在安装之处,硬盘的系统的安装就要考虑一个问题:这个服务器的功能是什么;只有回答了这个问题,后面的策略调优才能依据此来做;比如文件服务器,打印服务器,都是需要通过I/O来读取文件并传递到客户端,此时I/O十分重要,再比如数据库,目标是查询和获取/设置数据,除了要有充足的内存外,还需要从硬盘中获取大量的数据以及向硬盘存入大量的数据;对于邮件服务器,网络可能会更加重要一些;对于Web服务器,硬盘的读写可能就不是太重要,内存以及网络更加重要;
  9. 进程,是个执行实例,有内核提供资源来完成任务;

进程管理

  1. 进程的生命周期,进程是需要父进程进行创建的,通过调用fork函数,fork动词就是"分叉"之意(名词是叉子),此时子进程复制了父进程资源,包括内存地址;exec则开辟了自己的内存空间,共享内存毕竟会导致同时写发生异常;exit只是子进程释放大部分资源,但是无法全部释放,进入到了wait状态只有父进程得到通知后,对子进程进行处理的时候,才会完全释放子进程资源;处于zombie状态的进程是无法使用kill进行回收的,因为它已经被认为杀死了;只能通过杀死父进程来强制进行回收;但是如果父进程是init process,无法进行杀死,那么只能通过重启来进行zombie状态的子进程进行回收了;


  2. Thread是轻量级的进程,但是其实操作系统内核对于他们是一视同仁的;从性能角度来看,Thread是更加节省性能,因为它不需要复制资源,而是和父进程共享资源,但是开发难度却加大,因为需要考虑对于共享资源的加锁,序列化等机制;
  3. 进程的优先级和nice level,进程的优先级越高,越容易获得CPU的处理资源,处理时间更长;静态的优先级(static priority)不能改变,但是可以通过指定nice level来间接地动态(dynamic priority)提高进程的优先级;19 ~ -20,默认是0,nice level越小,优先级越高,-20是最紧急的进程;
  4. 环境切换(Context switch),需要中断一起来理解,环境,是指进程运行时候的数据;当中断发生的时候,就会发生环境切换,这是这些数据将会被保存到寄存器中;中断分为硬中断以及软终端,硬中断来自于设备,设备,网卡,这些中断是要求操作系统作出相应,优先级最高,软中断则是操作系统任务级别的中断,是可以被延迟的;
  5. Linux的CPU schedule机制,是会为每个进程分配时间片,并放入到active队列中,执行完毕后,会重新分配时间片(time slice),放入到expire队列中,当active队列的进程全部执行完毕后,expire队列变成了active队列,循环往复;

内存

  1. 内存有两个作用,一个Page Cache,用于映射硬盘文件,还有一个主要功能,就是映射物理内存,所有的这些功能都是通过Virutal Memory Manager来进行管理和实现的;
  2. 虚拟内存一个Page有4K,虚拟内存的管理是由buddySystem来进行管理,他知道如何来分配内存,怎么分配内存避免内存碎片,同时,如果内存不够了,还会调用清理程序,对于管理的内部进行清理;

文件系统

  1. 和内存类似,VFS(virtual File System)作为进程和文件系统接口,是的上层进程应用可以忽略底层文件系统的不同;
  2. Ext2系统通过inode-bitmap以及inodetable来管理文件;
  3. Ext3系统是Ext2的升级版本,旧有版本处理流程是:写入文件,首先修改文件的元数据(metadat,比如文件大小,属性等),然后在写入文件;但是如果修改完元数据之后,机器宕机了,造成了文件元数据和文件不一致情况,尽管可以通过fsck对文件系统进行一致处理,但是如果硬盘数据很多,很浪费时间;日志文件则是会记录操作过程,首先是记录日志,然后写数据(包括元数据),最后再把日志删掉;ext3主要是增加了日志功能,共有三种模式:日志模式,保证元数据(文件信息)以及数据(文件变化内容)都进行日志记录;对性能影响比较大;ordered,首先是写文件数据,文件写入成功的同时记录修改元数据日志,最后修改元数据;writeback,记录元数据的修改日志,但是没有立即对数据进行写会;日志问题并不是找回数据,而是维持数据的一致性问题;保证文件的元数据和数据是保持一致的;
  4. 在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回溯并重整被中断的部分,而不必花时间去检查其他的部分,故重整的工作速度相当快,几乎不需要花时间。
  5. 关于硬链接,删除原始文件其实不过是删掉inode上面的一个硬链接而已,所以如果一个文件地址(inode)上面有多个连接,删除任意一个都不会导致文件物理路径释放,只有当inode上面的硬连接数为0才会真是删除;软连接并不会作为inode的连接,他只是一个指令文件,执行该文件是导引到指定inode上面;所以原始文件连接删除后,硬链接文件仍然可用,但是软连接文件执行则会报错;
原文地址:https://www.cnblogs.com/xiashiwendao/p/5230494.html