一直以来笔者所使用的可道云系统都有这样的一个问题,就是在内网上传一些比较大的视频文件的时候,上传速度平均的一般只有70MB/s左右,偶尔能飙到将近90MB/s,但很快又会掉下来,而且总是达不到100MB/s,按照道理来说笔者家里相关的网络设备都是千兆的设备,网卡保底也是千兆的,传送一些文件到网内的 Windows 客户端系统,速度也可以达到100MB/s以上,应该跟网络设备的网络性能没有太大的关系,而且,笔者发现在上传这些文件到可道云系统服务器的时候,服务器的CPU使用率也有点偏高,因此,可能是跟系统的一些策略有关系。
在这里先说一下笔者服务器的环境:操作系统:Rocky Linux 9.7,其它的应用环境包括 nginx 1.29.4+PHP 8.4.8+MariaDB。
为了验证问题出在什么地方,笔者在终端中执行了“top”命令,然后按键盘“P”(大写)按CPU使用率排序,查看哪些进程占用CPU最多(查看结束后可以按“q”退出)。最后发现,在上传较大的视频文件的时候,setroubleshootd进程的CPU占用率最高、nginx进程其次,考虑到上传文件的时候,nginx确实需要占用一些资源,所以这次排查的目标,就定位在setroubleshootd进程身上了。
setroubleshootd进程是什么进程?setroubleshootd 是 SELinux Troubleshooting Daemon 的缩写,它是 SELinux(Security-Enhanced Linux) 故障排除系统的一部分。主要功能是:1、自动分析SELinux拒绝日志;2、提供用户友好的解决方案建议;3、通过桌面通知或命令行提示SELinux相关问题;4、帮助管理员理解和解决SELinux策略冲突。随后,笔者执行了“getenforce”命令,执行结果是“Permissive”,显示笔者系统的SELinux处于“宽容”模式,在该模式下,SELinux虽然不会阻止任何操作,只会记录违规,但SELinux仍在记录大量审计日志,因此setroubleshootd进程的CPU占用率可能会出现偏高,特别是针对大文件的记录。
为了验证笔者的想法是否正确,笔者执行了以下配置SELinux策略减少日志的操作:
# 1. 设置SELinux为完全permissive模式
sudo setenforce 0
# 2. 临时禁用SELinux审计(当前会话)
sudo semodule -DB
# 3. 永久减少SELinux日志级别
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
# 4. 配置audit规则减少日志
cat > /etc/audit/rules.d/99-selinux-quiet.rules << EOF
# 减少SELinux相关审计
-a never,exclude -F msgtype=AVC
-a never,exclude -F msgtype=SELINUX_ERR
EOF
# 重新加载audit规则
sudo augenrules --load
执行以上配置后,笔者再测试了一下上传多个大的视频文件,结果就是上传速度已经恢复到应有的水平了,因此造成上传视频文件慢的问题,与SELinux策略是有关系的。不过,网上有人也提到,可以彻底禁用SELinux,但考虑到安全的问题,笔者建议大家需要再三思考和衡量。

