为什么我在Linux上的服务会消耗大量CPU?

洁净

我在Linux sshield中创建了一个服务,用于通过ssh保护暴力攻击。我的服务已经完成,并且一切运行良好。

但是...我看到了一些细节。此服务消耗大量CPU!

图像:服务器中sshield的CPU

图片:Sshield在桌面上的CPU

它消耗了20.6%,实在太多了

我的服务在一秒钟的循环无限时间内运行。会导致CPU占用过多吗?其他是什么?

GitHub:https : //github.com/cleanet/sshield
评论Shield:https : //www.youtube.com/watch? v = 0rj4j7VqXXI

修改| 2020年3月1日13:09

我编辑了脚本,删除了以下内容:

lineas_antiguas=$(wc -l /var/log/auth.log);
IFS=" " read -ra lineas_antiguas <<< $lineas_antiguas;

添加常量:

declare -r SSHIELD_LOG_FILE="/var/log/sshield.log"
declare -r AUTH_LOG_FILE="/var/log/auth.log"

并用它替换路径。另外,我将while循环替换为:

tail -F -n 0 "$AUTH_LOG_FILE" | while read line
do
   ...
done

并删除:

lineas=$(wc -l /var/log/auth.log);
IFS=" " read -ra lineas <<< $lineas;
linea_contenido=$(tail -n 1 /var/log/auth.log);

我的脚本已在我的GITHUB中更新

结果是,它并没有消耗太多的CPU和内存0.3%的CPU和0.2%的RAM

但。为什么重复服务

匿名

如果我没看错,那么您从头开始不断地在文件中计数行/var/log/auth.log,并且在做一些事情:

while [ TRUE ]
do

    lineas=$(wc -l /var/log/auth.log);
   ...
    ip_logueada=$(wc -l /var/log/auth.log | grep -E -o "[0-9]{1,9}")
   ....
done

因此,承受压力的不仅是CPU,还包括硬盘。

如果确实必须从头开始处理日志文件以计算行数或收集统计信息,则在脚本启动时仅执行一次,不要循环重复此操作,这是浪费和不必要的。

您想要的是正在监视的文件的某种尾巴因此,您可能会遇到以下情况:

tail -n0 -F /var/log/auth.log | while read line
do
  echo "$line"
  # do something
done

在将新行写入文件时,此代码段将回显新行。因此,您只需要“侦听”新行流,对其进行解析并跟踪有问题的IP地址。这种方法应该可以解决您的性能问题。

一点建议:对源文件和目标文件使用变量名。例如/var/log/auth.log,在您的代码中重复了多次,所以也是如此/var/log/sshield.log

您可以在脚本的开头添加一些变量,甚至可以将它们声明为常量(只读变量),如下所示:

declare -r SOURCE_LOG_FILE="/var/log/auth.log"

然后,您可以简单地编写:tail -n0 -F "$SOURCE_LOG_FILE"这样就避免了重复。

我还将代码分成几个功能块。例如,您可以拥有:

  • 一种发送邮件的功能
  • 另一个跟踪计数器的功能:传递IP地址,它检查当前会话中记录了多少次违规,如果达到阈值,则阻止IP地址。

这样可以使代码更清晰,更易于维护。现在,流程不容易遵循,并且代码无处不在。

您还应该具有将警报记录到文件的功能/var/log/sshield.log您有很多重复的行,例如:

echo "logged ip: $ip_logueada - $(date)" >> /var/log/sshield.log

创建一个函数,然后仅将要记录的文本作为参数传递,然后让该函数添加时间戳并将文本写入文件,并以所需的方式进行格式化。通过消除冗余,可以大大简化代码

现在,我必须同意,您正在重新发明轮子,有免费的工具可以越来越有效地工作。这项运动对教育有好处。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么RestTemplate会消耗过多的内存?

为什么select()会在程序中消耗大量CPU时间?

为什么创建一个大型Java阵列会消耗大量内存?

为什么简单的Go应用会消耗大量内存

为什么在DataFrame上使用union()/ coalesce(1,false)时,Spark中的大量数据会乱码?

为什么MySQL会消耗大量内存?

为什么我在Watson IoT Platform上的历史服务会一直变得“未配置”?

实时服务器上的laravel-当提交大量数据时,为什么验证会导致内部服务器错误?

为什么RegExp.test在IE中消耗大量时间?

Firefox消耗大量CPU

为什么kworker在Linux 3.0.0-12服务器上消耗了这么多资源?

移植到较新的Linux内核时,为什么我的RPC服务器使用5倍CPU?

为什么不同的100%cpu负载会导致cpu上的温度不同?

为什么音频设备的较低延迟会转化为更高的CPU消耗?

为什么我的CPU会自己工作到死

为什么Google在Firefox中的搜索结果会消耗CPU?

为什么在闲置时ubuntu会消耗25%的CPU?

为什么Linux会杀死我的进程?

Xpath在Postgresql上消耗了大量CPU

为什么STRAIGHT_JOIN会消耗更多的CPU?

当我粘贴大量数字时,为什么Excel会舍入最低有效数字?

为什么CPU速度甚至会大量变化?

在zvol上的mkfs.ntfs期间消耗大量资源,为什么(以及如何限制这一点)?

如果 tomcat 作为 Windows 服务托管,tomcat8.exe 会消耗大量 CPU/内存

为什么我会遇到此错误:禁止您无权访问 / 在此服务器上

为什么Xorg安装NVIDIA驱动后会消耗大量CPU?

为什么 EC2 服务器上的多个 Ruby 进程会导致 100% 的 CPU 使用率?

为什么我的 Java 应用程序创建了多个线程,名称为“JMX 客户端心跳”,这些线程消耗大量 CPU?

消耗大量 CPU 的脚本