Linux操作系统优化
一、开启VT和HT
Hyper-Threading(HT)
基本做云平台的,VT 和 HT 打开都是必须的,超线程技术(HT)就是利用特殊的硬件指令,把两个逻辑内核模拟
成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了 CPU 的闲置时 间,提高的 CPU 的运行效率。
二、关闭 CPU 节能
关闭节能后,对性能还是有所提升的,所以坚决调整成性能型(Performance)。当然也可以在操作系统级别进行
# 也可以在系统层面进行设置,配置方法如下:
for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f $CPUFREQ ] || continue; echo -n performance > $CPUFREQ; done
三、yum源处理与常用软件包安装
# 一:先在测试环境,配置好yum源
默认国外的yum源(软件仓库)比较慢,所以换成国内的。
# 1.1、备份
[root@egon ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 1.2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/
[root@egon ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 1.3.添加epel源
[root@egon ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 二:然后执行yum update -y,以及安装常用软件包,然后执行部署,将部署过程中安装的包缓存本地
[root@egon ~]# yum update -y # 刚装完系统后就立即执行,日后就不要轻易更新了
[root@egon ~]# yum -y install tree nmap sysstat lrzsz telnet bash-completion bash-completion-extras vim lsof net-tools rsync ntpdate nfs-utils
# 三:将所有主机上的软件包汇总到一起,做成一个自己的yum源用来后期使用
四、规范系统主机名
hostnamectl set-hostname 主机名 # 主机名能够反映出主机的作用即可
五、添加hosts文件
# 编辑好之后,每台机器都发一份
vim /etc/hosts
172.16.10.11 nc1 ceph-deploy
172.16.10.12 nc2
172.16.10.13 nc3
172.16.10.14 cs1
172.16.10.15 cs2
172.16.10.16 cs3
# 实现集群主机之间相互用主机名解析
六、关闭SELinux
SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现,这个功能让系统管理员又爱又恨,这里我们还是把它给关闭了吧,至于安全问题,后面通过其他手段来解决,这也是大多数生产环境的做法,如果非要开启也是可以的。
#临时关闭
[root@egon ~]# setenforce 0
#永久关闭,修改完配置后重启主机
[root@egon ~]# sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
#检查结果
[root@egon ~]# grep "disabled" /etc/selinux/config
七、关闭防火墙
关闭防火墙的目的是为了让初学者学习更方便,将来在学了Firewalld技术后可再统一开启。 在企业环境中,一般只有配置外网IP的linux服务器才需要开启防火墙,但即使是有外网IP,对于高并发高流量的业务服务器仍是不能开的,因为会有较大性能损失,导致网站访问很慢,这种情况下只能在前端加更好的硬件防火墙了。
# 临时关闭
[root@egon ~]# systemctl stop firewalld
# 设置开机不启动
[root@egon ~]# systemctl disable firewalld
八、配置系统时间
#给定时任务加上注释
[root@egon ~]# echo '#Timing synchronization time' >>/var/spool/cron/root
#定时任务
[root@egon ~]# echo '0 */1 * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root
#检查结果
[root@egon ~]# crontab -l
九、系统内核优化
1、ulimit命令介绍
我们可以ulimit命令对系统资源进行控制,选项如下
设置用户级所能打开的最大进程数目:-u选项
ulimit -u 3
设置用户级所能分配到的文件描述符数量:-n选项
ulimit -n 12
2、控制用户开启的最大进程数目
[root@egon ~~]# useradd egon
[root@egon ~~]# ulimit -u 3 # 每个用户能同时开启的最大进程数均只有3个
[root@egon ~~]# su - egon # 切换到egon用户下,先执行了一个bash解释器进程,此外还能再开俩个
[egon@egon ~~]$ sleep 1000 &
[1] 1435
[egon@egon ~~]$ sleep 2000 &
[2] 1436
[egon@egon ~~]$ sleep 3000 &
-bash: fork: retry: 资源暂时不可用
-bash: fork: retry: 资源暂时不可用
-......
# 注意:
1、ulimit -u 3是限制每个用户能同时开启的最大进程数均只有3,而不是累计到一起总共有3个
2、测试的时候sleep后的时间长一点,模拟出同时开启多个进程的效果,不然执行一条短命令很快就结束了
3、文件描述符
进程每打开一个文件,操作系统内核就会为该打开的文件分配一个编号(非负整数),该编号称之为文件描述符(File Descriptor)或者文件handle->也有人将其译为文件句柄
文件打开后的处理逻辑:
进程->文件描述符->操作系统内核->一个具体的文件
即内核(kernel)就是利用文件描述符(file descriptor)来访问文件
在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。
更多关于描述符的概念:https://www.cnblogs.com/linhaifeng/articles/13959014.html
进程每打开一个文件,操作系统就会为进程分配一个对应的文件描述符。文件描述符的数目是可以设置的,而一旦设置过小,进程会随着打开的文件数增多,因为达到了文件描述的上限而无法打开文件,从而抛出异常
# 文件描述符测试代码
[root@egon ~~]# cat test1.py
import os
import time
from threading import Thread
print(os.getpid())
def task(n):
with open('%s.txt' %n,mode='wt') as f1:
time.sleep(1000)
if __name__ == "__main__":
count=1
while True:
Thread(target=task,args=(count,)).start()
count+=1
time.sleep(3)
[root@egon ~~]# cat test2.py
import os
import time
from threading import Thread
print(os.getpid())
def task(n):
with open('egon%s.txt' %n,mode='wt') as f1:
time.sleep(1000)
if __name__ == "__main__":
count=1
while True:
Thread(target=task,args=(count,)).start()
count+=1
time.sleep(3)
# 测试
[root@egon ~~]# ulimit -n 12 # 最大的文件描述符数为12,每个用户级进程能打开的最大文件数均只有12个
[root@egon ~~]# python test1.py &
[1] 1263
[root@egon ~~]# 1263
[root@egon ~~]# python test2.py &
[2] 1266
[root@egon ~~]# 1266
# 在另外一个终端查看
[root@egon ~~]# ll /proc/1263/fd
总用量 0
lrwx------. 1 root root 64 11月 12 18:18 0 -