DC's blog DC's blog
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)

DC

愿我一生欢喜,不为世俗所及.
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)
  • 计算机基础

  • linux基础

    • 准备工作
    • 初识shell与基础常用命令
    • 文件管理之基础命令
    • 文件管理之四大模式
    • 文件管理之命令补充
    • 文件管理之文件系统
    • 权限管理之用户与组
    • 权限管理之文件权限
    • 权限管理之ACL
    • 权限管理之su与sudo
    • 软件包管理之rpm
    • 软件包管理之yum
    • 查看进程
    • 管理进程
    • 存储管理之传统磁盘管理
    • 存储管理之LVM
    • 网络管理
    • shell基础
    • crond计划任务
    • 系统优化
      • yum源处理与常用软件包安装
      • 规范系统主机名
      • ssh秘钥登录
      • 关闭SELinux
      • 关闭防火墙或者开发对应的端口
      • 配置ntp服务,同步系统时间
      • ulimit
        • 选项
        • 文件描述符
        • 永久配置
      • 其他
  • mysql

  • git

  • 数据结构与算法

  • axure

  • english

  • docker

  • IT_Need
  • linux基础
DC
2022-10-08
目录

系统优化

系统优化参考链接: https://zhuanlan.zhihu.com/p/340313062
内心OS: 运维好吃经验.. 难道开发不吃经验嘛?可感觉运维比开发更繁琐一丢丢.. 运维不简单啊!! 若几年后我开发不转运维,那我得去考个研... 进行python AI方面的系统化学习  路漫漫其修远兮.. 学到老活到老...

# yum源处理与常用软件包安装

注意:
     若从头接手项目, 将部署过程中安装的包缓存本地,将所有主机上的软件包汇总到一起, 做成一个自己的yum源用来后期使用.
     若中途接手项目,进行升级时, 测试环境先倒腾一遍,将回滚方案全都写好,一旦出问题,自动运行脚本回滚.. 然后线上环境升级,最开始只升几台,观察一两周,再慢慢扩大升级规模..

# -- 1.将系统默认的yum源移动到指定目录下
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# -- 2.下载aliyun的Base源和epel源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum update -y # -- 刚装完系统后就立即执行,往后就不要轻易执行此命令啦
# -- 3.安装常用的软件包
yum -y install tree nmap sysstat lrzsz  telnet bash-completion bash-completion-extras vim  lsof  net-tools rsync ntpdate nfs-utils
1
2
3
4
5
6
7
8

# 规范系统主机名

主机名通常会与 /etc/hosts 文件搭配使用.. 进而实现集群主机之间相互用主机名解析..

hostnamectl set-hostname 主机名  # -- 主机名能够反映出主机的作用即可

vim /etc/hosts  # -- 编辑好之后,每台机器都发一份  hosts文件充当的就是DNS服务器的角色
172.16.10.11 nc1 ceph-deploy # -- IP可以对应多个主机名
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
1
2
3
4
5
6
7
8
9

# ssh秘钥登录

ssh-keygen	# -- 生成私钥与公钥 生成时候还可以加个密码,这样的话,密钥连接时,就需要输入这个密码
ssh-copy-id -i root@服务端ip地址  # -- 把自己的公钥上传到服务端
ssh root@服务端ip地址  # -- 客户端连接到服务端(会通过密钥的方式连接,不再输入服务端的账号和密码)

"""
密钥登录: 通常会在客户端生成公钥和私钥.. 
         将公钥上传给服务器,往后客户端链接服务端的时候,就通过私钥链接即可.
1> xshell客户端对应服务端的软件openssh-server. xshell可通过密钥登录.
   xshell配置密钥登录后,在服务端可以禁用传统的账号密码登录..
   `vim /etc/ssh/sshd_config` 将PasswordAuthentication yes 改为 PasswordAuthentication no
2> 主机A、主机B..都可以通过密钥登录主机M(AB将该客户端的公钥给M就行) 过程略.
   集群之间,主机与主机相连通常私钥不会再加个密码.. 
   主机A:  `ssh root@主机M的ip地址 命令`  # -- 实现自动化
"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 关闭SELinux

 """
  SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现.
  这个功能让系统管理员又爱又恨,这里我们还是把它给关闭了吧,至于安全问题,后面通过其他手段来解决,这也是大多数生产环境的做法,如果非要开启也是可以的.
 """
 setenforce  0	# -- 临时关闭
 sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config # -- 永久配置,重启生效
 grep "disabled" /etc/selinux/config	# -- 检查结果
1
2
3
4
5
6
7

# 关闭防火墙或者开发对应的端口

"""
关闭防火墙的目的是为了让初学者学习更方便. 将来在学了Firewalld技术后可再统一开启. 在企业环境中,一般只有配置外网IP的linux服务器才需要开启防火墙,但即使是有外网IP,对于高并发高流量的业务服务器仍是不能开的,因为会有较大性能损失,导致网站访问很慢,这种情况下只能在前端加更好的硬件防火墙了..
"""
# -- 临时关闭
systemctl stop firewalld

# -- 设置开机不启动
systemctl disable firewalld
1
2
3
4
5
6
7
8

# 配置ntp服务,同步系统时间

# -- 给定时任务加上注释
echo '#Timing synchronization time' >> /var/spool/cron/root
# -- 定时任务
echo '0 */1 * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >> /var/spool/cron/root
# -- 检查结果
crontab -l
1
2
3
4
5
6

# ulimit

我们可以使用ulimit命令对系统资源进行控制,是临时的配置

# 选项

设置每个用户级/普通用户所能打开的最大进程数目: -u 选项

ulimit -u 3
1

设置 每个 用户级/普通用户开启的 每个进程 所能分配到的文件描述符/文件句柄数量: -n 选项

"""
文件描述符是linux独有的机制,每打开一个文件,给打开的文件分配一个编号(不是inode!!!)
具体来说,进程每打开一个文件,OS内核就会为该打开的文件分配一个编号(非负整数),该编号称之为文件描述符或者文件handle.

文件打开后的处理逻辑:
进程->文件描述符->操作系统内核->一个具体的文件
即内核(kernel)就是利用文件描述符(file descriptor)来访问文件

文件描述符的数目是可以设置的
一旦设置过小,进程会随着打开的文件数增多,因为达到了文件描述的上限而无法打开文件,从而抛出异常
"""
# -- 注意是同时打开!!!什么场景一个进程会同时打开上千上万个文件?
#    高并发!!达到上限,打不开文件了,用户拿不到数据..进程报IO错误.
ulimit -n 12  # -- 默认是1024个
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 文件描述符

[root@localhost ~]# vim fd.py
[root@localhost ~]# cat fd.py
import time
import os

print(os.getpid())

with open('a.txt',mode='wt') as f1,open('b.txt',mode='wt') as f2:
    time.sleep(1000)

[root@localhost ~]# python fd.py &
[1] 14762
"""
/proc 进程虚拟文件系统; 
/proc/14762 放置该进程相关的所有文件;
/proc/14762/fd 该进程打开的文件.  
    一个进程可通过文件描述符(数字)关联打开的文件
    要注意的是,该进程文件描述符的数量与该进程打开文件的数目不是一一对应的!!!
"""
[root@localhost ~]# cat /proc/14762/fd
总用量 0
# -- 注意哦!! 多个文件描述符可对应同一个文件,这里0 1 2 指文件需要终端的输入,文件产生的结果需要输出到终端
# -- 一个进程产生默认就会带着 0 1 2 这三个文件描述符
# -- 这也跟linux一切皆文件 以及 重定向的知识对应了起来 芜湖~
lrwx------ 1 root root 64 8月  31 10:59 0 -> /dev/pts/1	# -- /dev/pts/1是当前所在终端 标准输入
lrwx------ 1 root root 64 8月  31 10:59 1 -> /dev/pts/1  # -- 标准正确输出
lrwx------ 1 root root 64 8月  31 10:59 2 -> /dev/pts/1  # -- 标准错误输出
l-wx------ 1 root root 64 8月  31 10:59 3 -> /root/a.txt
l-wx------ 1 root root 64 8月  31 10:59 4 -> /root/b.txt 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 永久配置

修改配置文件 /etc/security/limits.conf

# -- 加大文件描述符与最大打开的进程数
"""
<domain><type><item><value>
    <domain>  表示要限制的用户
    <type>    设定类型
    <item>    表示可选的资源
    <value>   表示要限制的值
"""
# -- 102400通常够用了.没有一个固定的标准,设置大了,若进程bug会无限占用资源,不安全 设置小了不够用,要权衡.
[root@localhost ~]# cat >>/etc/security/limits.conf<<EOF
> * soft nofile 102400
> * hard nofile 102400
> * soft nproc 102400
> * hard nproc 102400
> EOF

# -- 重启查看
[root@localhost ~]# ulimit -u
102400
[root@localhost ~]# ulimit -n
102400

"""
Ps: 还有个配置文件更精细. /etc/security/limits.d/20-nproc.conf
    该文件只用于控制用户最多同时打开的进程数目,优先级高于/etc/security/limits.conf
    重启后,修改生效..
"""
[root@egon ~]# cat /etc/security/limits.d/20-nproc.conf 
egon1      soft    nproc     3          # 用户egon1最多同时开3个进程
egon2      soft    nproc     4          # 用户egon2最多同时开4个进程
*          soft    nproc     5          # 其他用户最多同时开5个进程
root       soft    nproc     unlimited  # root用户无限制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 其他

○ 开启VT和HT
        VT 虚拟化之意, Linux虚拟出多个OS运行在一个主机之上..
        HT 超线程技术...
Ps: 实体机才会配置,若用的阿里云(本身就是vm)是不需要配置的..

○ 关闭实体机的CPU节能

○ 关闭NetworkManager
        进行网卡绑定的话,必须关掉

○ Jumbo frames
        万兆网卡MTU=9000,交换机也要进行相应的设置

○ 调整swappiness
        linux内存够用,有时候也会使用swap分区..(linux底层算法决定的) 但会导致性能效率降低..
        所以在内存够用的时候,让它尽可能的少用swap分区.. 建议调整为10
echo "vm.swappiness = 10" | tee -a /etc/sysctl.conf
sysctl -p 或者 reboot 永久生效

○ 调整Kernel pid max 内核最大的pid个数


crond计划任务
install_db

← crond计划任务 install_db→

最近更新
01
deepseek本地部署+知识库
02-17
02
实操-微信小程序
02-14
03
教学-cursor深度探讨
02-13
更多文章>
Theme by Vdoing | Copyright © 2023-2025 DC | One Piece
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式