步骤一:设置最大 PID 数
# vi /etc/sysctl.conf
添加以下内容:
......
kernel.pid_max=102400
(补充:这里以把 PID 数设置成 102400 为例)
步骤二:让修改的 /etc/sysctl.conf 文件生效
# sysctl -p /etc/sysctl.conf
# vi /etc/sysctl.conf
添加以下内容:
......
kernel.pid_max=102400
(补充:这里以把 PID 数设置成 102400 为例)
# sysctl -p /etc/sysctl.conf
某些服务没有开机自启例如 NetworkManager.service
在系统日志里可以类似 …… Job network.target/start deleted to break ordering cycle starting with …… 报错例如:
# cat /var/log/messages
Jan 1 10:09:24 server systemd[1]: network-online.target: Found ordering cycle on network.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on NetworkManager.service/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on basic.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on slices.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on mysql.slice/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on remote-fs.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on remote-fs-pre.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on iscsi.service/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on network-online.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Job network.target/start deleted to break ordering cycle starting with network-online.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found ordering cycle on NetworkManager.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on basic.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on slices.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on mysql.slice/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on remote-fs.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on remote-fs-pre.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on iscsi.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on network-online.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on NetworkManager-wait-online.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Job NetworkManager.service/start deleted to break ordering cycle starting with NetworkManager-wait-online.service/start
从案例中日志里的内容可以判断:
1) network.target/NetworkManager.service 启动
2) NetworkManager.service 作为基础服务依赖 basic.target
3) basic.target 依赖所有 slice 包括 mysql.slice
4) mysql.slice 依赖 iscsi.service/remote-fs.target/remote-fs-pre.target
5) iscsi.service/remote-fs.target/remote-fs-pre.target 依赖 network.target/NetworkManager.service
6) 系统为了防止启动时陷入死循环,systemd 报错 Job NetworkManager.service/start deleted to break ordering cycle 并放弃启动 NetworkManager.service
取消不太重要的服务的依赖要求
# vi /etc/systemd/system/mysql.slice
将以下内容:
......
Before=slices.target
Wants=-.slice
After=-.slice remote-fs.target
......
修改为:
......
Before=slices.target
Wants=-.slice
After=-.slice remote-fs.target
......
(补充:这里以取消使用 /etc/systemd/system/mysql.slice 文件的服务的依赖要求为例)
[root@server ~]# hostnamectl set-hostname eternalcenter.com
[root@eternalcenter ~]# hostname
eternalcenter
(补充:这里只会显示 “.” 符号前面的内容,“.” 后面的内容不会在这里显示)
[root@eternalcenter ~]# hostname -f
eternalcenter.com
[root@eternalcenter ~]# hostname -i
[root@eternalcenter ~]# hostname -I
/init: error while loading shared libraries: libsystemd-shared-239.so: cannot open shared object file: No such file or directory
kernel panic - no syncing: Attempted to kill init! exitcode=0x00007f00
# ldconfig -p > /tmp/ldconfig.out
# for l in $(awk '{ print $1 }' /tmp/ldconfig.out); do matches=$(awk "\$1 == \"$l\" { print }" /tmp/ldconfig.out); if [ $(echo "$matches" | wc -l) -ge 2 ]; then echo "$matches"; echo; fi; done
(补充:如果没有第三方软件库的话这里不会有任何输出)
(步骤略)
# ldconfig
# dracut -f /boot/initramfs-(uname -r).img $(uname -r)
(补充:这里以将正在运行的内核版本生成一个新的 initramfs 为例)
(注意:此时原来启动系统时使用的那个 initramfs 文件会被覆盖)
# reboot
https://access.redhat.com/solutions/7096246
# vi /etc/ld.so.conf
或者:
# vi /etc/ld.so.conf.d/*.conf
添加以下内容:
......
/root/lib
(补充:这里以添加位于目录 /root/lib 的库为例)
(注意:这里的 /etc/ld.so.conf.d/*.conf 是指 /etc/ld.so.conf.d/ 目录下任意以 .conf 结尾的文件,例如 /etc/ld.so.conf.d/one.conf)
# cp /boot/initramfs-4.18.0-553.89.1.el8_10.x86_64.img /boot/initramfs-4.18.0-553.89.1.el8_10.x86_64.img.backup
(
补充:
1) 这里以将:/boot/initramfs-4.18.0-553.89.1.el8_10.x86_64.img 备份为:/boot/initramfs-4.18.0-553.89.1.el8_10.x86_64.img.backup 为例
2) initramfs 是压缩的 cpis 文件,是临时的根文件系统包含一些脚本、程序和配置文件,在 Linux 启动过程中被加载在内存里,负责 Linux 操作系统在挂载根目录前加载内核模块、检查硬件、加载驱动以及挂载真正的根文件系统等)
# dracut -f /boot/initramfs-(uname -r).img $(uname -r)
(补充:这里以将正在运行的内核版本生成一个新的 initramfs 为例)
(注意:此时原来启动系统时使用的那个 initramfs 文件会被覆盖)
# reboot
# ldconfig -p -M -X | grep out
(
补充:
1) 这里的 -N 和 -X 必须一起使用,作用是不更新相关链接和不重建相关缓存
2) 这里的 -p 作用是打印现在在缓存中的相关目录和相关候选库
3) 这条命令会显示目前在缓存中的第三方库
)
# for l in $(ldconfig -p -N -X | awk '{ print $1 }') ; do matches=$(ldconfig -p -N -X | awk "\$1 == \"$l\" { print }"); if [ $(echo "$matches" | wc -l) -ge 2 ]; then echo "$matches"; echo; fi; done |wc -l
(补充:如果加载的库中没有重复的则这里不会有任何输出结果)