一、 系统性能分析的目的
1.1 找到系统性能的瓶颈
系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个Web服务,经常出现网页无法打开、打开速度慢等现象。遇到这些问题,就有人会抱怨Linux系统不好,其实这些都是表面现象。操作系统完成一个任务是与系统自身设置、网络拓朴结构、路由设备、路由策略、接入设备、物理线路等多个方面都密切相关的,任何一个环节出现问题,都会影响整个系统的性能。因此,当Linux应用出现问题时,应当从应用程序、操作系统、服务器硬件、网络环境等方面综合排查,定位问题出现在哪个部分,然后集中解决。
1.2 提供性能优化方案
查找系统性能瓶颈是个复杂而耗时的过程,需要在应用程序、操作系统、服务器硬件、网络环境等方面进行查找和定位,影响性能最大的是应用程序和操作系统两个方面,因为这两个方面出现的问题不易察觉,隐蔽性很强。而硬件、网络方面出现的问题,一般都能马上定位。一旦找到了系统性能问题,解决起来就非常迅速和容易,例如发现系统硬件存在问题,如果是物理故障,那么更换硬件就可以了,如果是硬件性能不能满足需求,升级硬件就可以了;如果发现是网络问题,比如带宽不够、网络不稳定,只需优化和升级网络即可;如果发现是应用程序问题,修改或优化软件系统即可;而如果是操作系统配置问题,修改系统参数、修改系统配置即可。
可见,只要找到了性能瓶颈,就可以提供性能优化方案,有标准、有目的地进行系统优化。
1.3 使系统硬件和软件资源的使用达到平衡
Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下由无数的开源软件支撑,常见的有Apache、Tomcat、MySQL、PHP等。开源软件的最大理念是自由、开放,那么Linux作为一个开源平台,最终要实现的是通过这些开源软件的支持,以最低廉的成本,达到应用性能的最优化。但是,系统的性能问题并非是孤立的,解决了一个性能瓶颈,可能会出现另一个性能瓶颈,所以说性能优化的最终目的是:在一定范围内使系统的各项资源使用趋于合理并保持一定的平衡,即系统运行良好的时候恰恰就是系统资源达到了一个平衡状态的时候。而在操作系统中,任何一项资源的过度使用都会破坏这种平衡状态,从而导致系统响应缓慢或者负载过高。例如,CPU资源的过度使用会造成系统中出现大量的等待进程,导致应用程序响应缓慢,而进程的大量增加又会导致系统内存资源的增加,当物理内存耗尽时,系统就会使用虚拟内存,而虚拟内存的使用又会造成磁盘I/O的增加并加大CPU的开销。因此,系统性能的优化就是在硬件、操作系统、应用软件之间找到一个平衡点。
二、 分析系统性能涉及的人员
2.1Linux系统管理人员
在做性能优化过程中,系统管理人员承担着很重要的任务,首先,系统管理人员要了解和掌握操作系统的当前运行状态,例如系统负载、内存状态、进程状态、CPU负荷等信息,这些信息是检测和判断系统性能的基础和依据;其次,系统管理人员还有掌握系统的硬件信息,例如磁盘I/O、CPU型号、内存大小、网卡带宽等参数信息,然后根据这些信息综合评估系统资源的使用情况;第三,作为一名系统管理人员,还要掌握应用程序对系统资源的使用情况,更深入的一点就是要了解应用程序的运行效率,例如是否有程序BUG、内存溢出等问题,通过对系统资源的监控,就能发现应用程序是否存在异常,如果确实是应用程序存在问题,需要把问题立刻反映给程序开发人员,进而改进或升级程序。
性能优化本身就是一个复杂和繁琐的过程,系统管理人员只有了解了系统硬件信息、网络信息、操作系统配置信息和应用程序信息才能有针对性地的展开对服务器性能优化,这就要求系统管理员有充足的理论知识、丰富的实战经验以及缜密分析问题的头脑。
2.2系统架构设计人员
系统性能优化涉及的第二类人员就是应用程序的架构设计人员。如果系统管理人员在经过综合判断后,发现影响性能的是应用程序的执行效率,那么程序架构设计人员就要及时介入,深入了解程序运行状态。首先,系统架构设计人员要跟踪了解程序的执行效率,如果执行效率存在问题,要找出哪里出现了问题;其次,如果真的是架构设计出现了问题,那么就要马上优化或改进系统架构,设计更好的应用系统架构。
2.3软件开发人员
系统性能优化最后一个环节涉及的是程序开发人员,在系统管理员或架构设计人员找到程序或结构瓶颈后,程序开发人员要马上介入进行相应的程序修改。修改程序要以程序的执行效率为基准,改进程序的逻辑,有针对性地进行代码优化。例如,系统管理人员在系统中发现有条SQL语句耗费大量的系统资源,抓取这条执行的SQL语句,发现此SQL语句的执行效率太差,是开发人员编写的代码执行效率低造成的,这就需要把这个信息反馈给开发人员,开发人员在收到这个问题后,可以有针对性的进行SQL优化,进而实现程序代码的优化。
从上面这个过程可以看出,系统性能优化一般遵循的流程是:首先系统管理人员查看系统的整体状况,主要从系统硬件、网络设备、操作系统配置、应用程序架构和程序代码五个方面进行综合判断,如果发现是系统硬件、网络设备或者操作系统配置问题,系统管理员可以根据情况自主解决;如果发现是程序结构问题,就需要提交给程序架构设计人员;如果发现是程序代码执行问题,就交给开发人员进行代码优化。这样就完成了一个系统性能优化的过程。
三、影响Linux性能的各种因素
3.1 系统硬件资源
1.CPU
CPU是操作系统稳定运行的根本,CPU的速度与性能在很大程度上决定了系统整体的性能,因此,CPU数量越多、主频越高,服务器性能也就相对越好。但事实并非完全如此。
目前大部分CPU在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程,因此,可以利用处理器的超线程特性提高系统性能。在Linux系统下,只有运行SMP内核才能支持超线程,但是,安装的CPU数量越多,从超线程获得的性能方面的提高就越少。另外,Linux内核会把多核的处理器当作多个单独的CPU来识别,例如两个4核的CPU,在Lnux系统下会被当作8个单核CPU。但是从性能角度来讲,两个4核的CPU和8个单核的CPU并不完全等价,根据权威部门得出的测试结论,前者的整体性能要比后者低25%~30%。
可能出现CPU瓶颈的应用有邮件服务器、动态Web服务器等,对于这类应用,要把CPU的配置和性能放在主要位置。
2.内存
内存的大小也是影响Linux性能的一个重要的因素,内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,导致资源浪费。Linux系统采用了物理内存和虚拟内存两种方式,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降,要保证应用程序的高性能运行,物理内存一定要足够大;但是过大的物理内存,会造成内存资源浪费,例如,在一个32位处理器的Linux操作系统上,超过8GB的物理内存都将被浪费。因此,要使用更大的内存,建议安装64位的操作系统,同时开启Linux的大内存内核支持。
由于处理器寻址范围的限制,在32位Linux操作系统上,应用程序单个进程最大只能使用2GB的内存,这样以来,即使系统有更大的内存,应用程序也无法“享”用,解决的办法就是使用64位处理器,安装64位操作系统。在64位操作系统下,可以满足所有应用程序对内存的使用需求 ,几乎没有限制。
可能出现内存性能瓶颈的应用有打印服务器、数据库服务器、静态Web服务器等,对于这类应用要把内存大小放在主要位置。
3.磁盘I/O性能
磁盘的I/O性能直接影响应用程序的性能,在一个有频繁读写的应用中,如果磁盘I/O性能得不到满足,就会导致应用停滞。好在现今的磁盘都采用了很多方法来提高I/O性能,比如常见的磁盘RAID技术。
RAID的英文全称为:Redundant Array of Independent Disk,即独立磁盘冗余阵列,简称磁盘阵列。RAID通过将多块独立的磁盘(物理硬盘)按不同方式组合起来形成一个磁盘组(逻辑硬盘),从而提供比单个硬盘更高的I/O性能和数据冗余。
通过RAID技术组成的磁盘组,就相当于一个大硬盘,用户可以对它进行分区格式化、建立文件系统等操作,跟单个物理硬盘一模一样,唯一不同的是RAID磁盘组的I/O性能比单个硬盘要高很多,同时在数据的安全性也有很大提升。
根据磁盘组合方式的不同,RAID可以分为RAID0,RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7、RAID0+1、RAID10等级别,常用的RAID级别有RAID0、RAID1、RAID5、RAID0+1,这里进行简单介绍。
RAID 0:通过把多块硬盘粘合成一个容量更大的硬盘组,提高了磁盘的性能和吞吐量。这种方式成本低,要求至少两个磁盘,但是没有容错和数据修复功能,因而只能用在对数据安全性要求不高的环境中。
RAID 1:也就是磁盘镜像,通过把一个磁盘的数据镜像到另一个磁盘上,最大限度地保证磁盘数据的可靠性和可修复性,具有很高的数据冗余能力,但磁盘利用率只有50%,因而,成本最高,多用在保存重要数据的场合。
我国实行网络安全等级保护制度,等级保护对象分为五个级别,由一到五级别逐渐升高,每一个级别的要求存在差异,级别越高,要求越严格。
第一级,自主保护级:信息系统受到破坏后,会对公民、法人和其他组织的合法权益造成损害,但不损害国家安全、社会秩序和公共利益;一般适用于小型私营、个体企业、中小学,乡镇所属信息系统、县级单位中一般的信息系统。
第二级,指导保护级:信息系统受到破坏后,会对公民、法人和其他组织的合法权益产生严重损害,或者对社会秩序和公共利益造成损害,但不损害国家安全;一般适用于县级其些单位中的重要信息系统;地市级以上国家机关、企事业单位内部一般的信息系统。例如非涉及工作秘密、商业秘密、敏感信息的办公系统和管理系统等。
第三级,监督保护级:信息系统受到破坏后,会对社会秩序和公共利益造成严重损害,或者对国家安全造成损害;一般适用于地市级以上国家机关、企业、事业单位内部重要的信息系统,例如涉及工作秘密、商业秘密、敏感信息的办公系统和管理系统;跨省或全国联网运行的用于生产、调度、管理、指挥、作业、控制等方面的重要信息系统以及这类系统在省、地市的分支系统;中央各部委、省(区、市)门户网站和重要网站;跨省连接的网络系统等。
第四级,强制保护级:信息系统受到破坏后,会对社会秩序和公共利益造成特别严重损害,或者对国家安全造成严重损害;一般适用于国家重要领域、重要部门中的特别重要系统以及核心系统。例如电力、电信、广电、铁路、民航、银行、税务等重要、部门的生产、调度、指挥等涉及国家安全、国计民生的核心系统。
第五级,专控保护级:信息系统受到破坏后,会对国家安全造成特别严重损害。一般适用于国家重要领域、重要部门中的极端重要系统。
三级等保指信息系统经过定级、备案这一流程之后,确定为第三级的信息系统,那么就需要做三级等保。
在我国,“三级等保”是对非银行机构的最高等级保护认证,一般定级为等保三级的系统有互联网医院平台、P2P金融平台、网约车平台、云(服务商)平台和其他重要系统。
这一认证由公安机关依据国家信息安全保护条例及相关制度规定,按照管理规范和技术标准,对各机构的信息系统安全等级保护状况进行认可及评定。
一般我们生活中接触多的定级为等保三级的系统有互联网医院平台、P2P金融平台、网约车平台、云(服务商)平台和其他重要系统。
根据《信息系统安全等级保护基本要求》,三级等保的测评内容涵盖等级保护安全技术要求的5个层面和安全管理要求的5个层面,包含信息保护、安全审计、通信保密等在内的近300项要求,共涉及测评分类73类。
通过“三级等保”认证,表明企业的信息安全管理能力达到国内最高标准。
CentOS7 系统服务器初始化配置、安全加固、内核升级优化
https://www.bilibili.com/read/cv13875630
https://github.com/WeiyiGeek/SecOpsDev/blob/master/OS-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Linux/CentOS/7/CentOS7-InitializeSecurity.sh
安全等保:Linux服务器基线安全
https://mp.weixin.qq.com/s/nvIWQClJQNrzNSZvZcmPYg
(1)Linux系统的第一个进程(pid=1)为init:Linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化。内核初始化的最后一步就是启动 pid 为 1 的 init 进程。这个进程是系统的第一个进程。它负责产生其他所有用户进程。
(2)init进程是所有进程的祖先,不可以kill(也kill不掉)
init 以守护进程方式存在,是所有其他进程的祖先。init 进程非常独特,能够完成其他进程无法完成的任务。Init 系统能够定义、管理和控制 init 进程的行为。它负责组织和运行许多独立的或相关的始化工作(因此被称为 init 系统),从而让计算机系统进入某种用户预订的运行模式。
(3)大多数linux发行版的init系统是和systemV相兼容的,被称为sysvinit
sysvinit 就是 system V 风格的 init 系统,顾名思义,它源于 System V 系列 UNIX。它提供了比 BSD 风格 init 系统更高的灵活性。是已经风行了几十年的 UNIX init 系统,一直被各类 Linux 发行版所采用。
(1)CentOS 5
(2)CentOS 6
(1)优点
sysVinit运行非常良好,概念简单清晰,它主要依赖于shell脚本。
(2)缺点
按照一定的顺序执行-->启动太慢、很容易夯(hang)住,fstab与nfs挂载问题
说明:CentOS6采用了Upstart技术代替sysvinit进行引导,Upstart对rc.sysinit脚本做了大量的优化,缩短了系统初始化时的启动时间,但是CentOS6为了简便管理员的操作,Upstart的很多特性并没有凸显或者直接不支持,因此在CentOS6中的服务启动脚本还是以原来的sysv的形式提供的,
(1)CentOS6
(2)Ubuntu14
说明:systemd技术的设计目标是克服sysvinit固有的缺点,提高系统的启动速度,和sysvinit兼容,降低迁移成本,
做主要的优点:并行启动
(1)RedHat 7/CentOS 7
(2)Ubuntu 15
方法1(在装系统时修改):
在安装系统的时候配置,修改内核选项:net.ifnames=0 biosdevname=0
方法2(装系统时忘记修改,装系统后修改):
(1)编辑网卡
# cd /etc/sysconfig/network-scripts/#mvifcfg-ens160 ifcfg-eth0 #mvifcfg-ens192 ifcfg-eth1 # vim ifcfg-eth0 TYPE=Ethernet BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 #网卡名称改为eth0 DEVICE=eth0 #设备名称改为eth0 ONBOOT=yes IPADDR=xxx.xxx.x.xx PREFIX=24GATEWAY=xxx.xxx.x.x DNS1=xxx.xxx.x.x IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_PRIVACY=no 注:删掉网卡内的UUID=176582f7-d198-4e4f-aab0-34ab10d17247 通用唯一识别码和HWADDR=00:0c:29:a5:3f:39MAC地址 这两行。 所有网卡都需要修改
(2)编辑grub文件
[root@localhost network-scripts]#cp-a /etc/sysconfig/grub /etc/sysconfig/grub.bak #备份文件 [root@localhost network-scripts]# vim /etc/sysconfig/grub GRUB_TIMEOUT=5GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=trueGRUB_TERMINAL_OUTPUT="console"GRUB_CMDLINE_LINUX="crashkernel=autonet.ifnames=0 biosdevname=0rhgb quiet"#这行添加net.ifnames=0biosdevname=0GRUB_DISABLE_RECOVERY="true"
(3)生成启动菜单
[root@localhost network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configurationfile... Found linux image:/boot/vmlinuz-3.10.0-514.el7.x86_64 Found initrd image:/boot/initramfs-3.10.0-514.el7.x86_64.img Found linux image:/boot/vmlinuz-0-rescue-7d9a96ac2162427d937e06ede5350e9e Found initrd image:/boot/initramfs-0-rescue-7d9a96ac2162427d937e06ede5350e9e.imgdone
然后重启服务器:reboot,重启服务器后查看网卡信息,
再安装操作系统的时候使用的最小化安装,有很多包没有安装,使用时发现好多命令没有如{vim、wget、tree...等},下面就安装命令,可以根据需求自行调整。
yum-yinstallwgetnet-tools screen lsof tcpdump nc mtr openssl-devel vim bash-completion lrzsz nmap telnet tree ntpdate iptables-services
rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
需要开机自启动的脚本或者配置,可以放在/etc/rc.local里,但是发现并没有执行,下面我们看一下原因。
# ll /etc/rc.local lrwxrwxrwx1root root13Jan523:31/etc/rc.local ->rc.d/rc.local #发现是个软连接文件 #ls-l /etc/rc.d/rc.local-rw-r--r--1root root473Oct2011:07/etc/rc.d/rc.local #问题在这里,没有执行权限 #chmod+x /etc/rc.d/rc.local #添加执行权限 #ls-l /etc/rc.d/rc.local-rwxr-xr-x1root root473Oct2011:07/etc/rc.d/rc.local 注:这样添加在rc.local里的开机自启动配置就可以执行了。
linux系统下都有一个默认的超级管理员root,ssh服务的默认端口是22,圈内都知道,那么接下来我们可以修改一下我们的默认端口和禁止root用户远程登录,初步提高一下服务器的安全
1、首先修改ssh的默认端口 #sed-i"s#\#Port 22#Port 53226#g"/etc/ssh/sshd_config #端口可以改成1-65535之间任意端口,建议改成较大的端口,因为一万以内的端口常用的服务有占用,防止冲突(需要注意的是:这个端口要记住,否则连接不上服务器)2、禁止root用户远程登陆 a):添加一个普通用户并设置密码(注:这一步必须执行,否则将造成远程连接不上服务器) # useradd xxx #添加xxx用户 #echo"pass"|passwd--stdin xxx #给xxx用户设置密码为pass b):修改ssh服务配置文件并撑起服务 #sed-i's/#PermitRootLogin yes/PermitRootLogin no/'/etc/ssh/sshd_config # systemctl restart sshd
此时断开当前连接或者新开一个连接就会发现使用root用户连接不上服务器了,莫慌,使用xxx用户连接然后切换到root用户即可
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,说白了就是安全机制,当然如果会配置的话建议配置更好,这里就介绍一下如何关闭吧,哈哈哈。
#sed-i.bak's#SELINUX=enforcing#SELINUX=disabled#g'/etc/selinux/config #修改配置文件需要重启服务器配置才会生效,如何立即生效那? # setenforce0#关闭SELinux立即生效,重启服务器后配置失效。
防火墙,不解释,内网服务建议关掉,对外开放的服务器需要配置规则,这里先关掉,关于防火墙配置规则等待后续更新。
# systemctl stop firewalld #临时关闭 # systemctl disable firewalld #永久关闭
装机后主机名默认为localhost,这里个人想更改自己的主机名,在不搭建内网DNS的情况,能通过主机名找到本机的IP地址。
# hostnamectl set-hostnameweb01 #设置主机名为web01,这样设置连配置文件里都修改了
# echo "192.168.6.6 web01" >>/etc/hosts #192.168.6.6为本机IP
如果是云服务器,这步优化基本都被作了,如果是物理机需要执行此步
#sed-i.bak's@#UseDNS yes@UseDNS no@gs@^GSSAPIAuthentication yes@GSSAPIAuthentication no@g'/etc/ssh/sshd_config # systemctl restart sshd
说明:GSSAPIAuthentication参数是用于Kerberos验证的,而对于绝大多数人来说,不可能使用这种验证机制的,所以要注意把他们停掉。然后重启服务会发现远程连接速度有明显提升
设置服务器字符集,国际通用utf-8,根据自身业务来定
# localectl status #查看当前字符集 System Locale: LANG=en_US.UTF-8VC Keymap: us X11 Layout: us # localectl set-locale LANG=zh_CN.UTF-8#修改字符集为zh_CN.UTF-8,命令行和配置文件都生效 #cat/etc/locale.conf #查看配置文件 LANG=zh_CN.UTF-8
CentOS 7.2系统默认最大打开文件限制为1024,每建立一个TCP连接既浪费一个限制(这里不细讲,后续会更新详细说明),为了提升服务器性能,所以我们要增加打开文件的最大限制
# ulimit -n #默认大小1024#echo"* soft nofile 65536">>/etc/security/limits.conf #xi修改最大限制为65535 #echo"* hard nofile 65536">>/etc/security/limits.conf
时间同步,这里不多说了,向OpenStack的所有节点的时间不一致会导致创建不了虚拟机,也会有其他的问题,不多说,我们生产上所有服务器时间都是同步的。
# yuninstall-y ntpdate #前面已经装过了 # ntpdate ntp1.aliyun.com #这里同步的是aliyun的时间,公司内部建议自己搭建时间服务器(减少流量、广播等),然后加入crontab即可,内网时间服务器等待后续更新。
TCP断开连接时会有一个等待时间为2msl(60秒)对应的状态为TIME_WAIT,如果业务并发较大的话会有很多的TIME_WAIT状态(详细等待后续更新),如何来解决那?
#cat/proc/sys/net/ipv4/tcp_timestamps #时间戳,默认是开启的 #cat/proc/sys/net/ipv4/tcp_tw_reuse # 连接复用,tcp_timestamps是开启的状态下是可以开启的,1为开启,默认是关闭的状态。 #cat/proc/sys/net/ipv4/tcp_tw_recycle #socket快速回收,net网络状态下不可以开启,负载均衡上不可以打开,读者根据自身情况开启或关闭,默认为关闭状态。
好了,服务器优化就介绍到这里,以上优化不分先后顺序!!
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)