Jenkins高CPU使用率

时间:2019-03-23 22:25:06

标签: jenkins centos

enter image description here

因此,上图显示了命令khugepageds,该命令有时使用98100 %的CPU。

我尝试查找jenkins如何使用此命令或如何使用此命令,但未成功。

我做了以下

  • pkill詹金斯
  • 詹金斯服务站
  • jenkins服务启动

当我pkill使用时,使用率下降,但是一旦重新启动,备份率就会再次升高。

以前有人遇到过这个问题吗?

6 个答案:

答案 0 :(得分:18)

所以,我们刚发生这种情况。根据其他答案以及我们自己的一些看法,我们可以通过运行以下命令来终止处理(并使其终止)...

rm -rf /tmp/*; crontab -r -u jenkins; kill -9 PID_OF_khugepageds; crontab -r -u jenkins; rm -rf /tmp/*; reboot -h now;

请确保将PID_OF_khugepageds替换为计算机上的PID。它还将清除crontab条目。将这全部作为一个命令运行,以使该过程不会自行恢复。机器将根据最后一条命令重新启动。

注意:虽然上面的命令应该终止进程,但是您可能想滚动/重新生成SSH密钥(在Jenkins机器,BitBucket / GitHub等以及Jenkins可以访问的任何其他机器上),甚至旋转一个新的Jenkins实例(如果可以的话)。

答案 1 :(得分:10)

是的,我们也受到了此漏洞的影响,这要感谢pittss使得我们能够检测到更多有关此的信息。

您应该检查/ var / logs / syslogs中的curl pastebin脚本,该脚本似乎在系统上启动了玉米进程,它将尝试再次升级对/ tmp文件夹的访问并安装不需要的软件包/脚本。

您应该从/ tmp文件夹中删除所有内容,停止jenkins,检查cron进程,并删除看似可疑的文件,然后重新启动VM。

由于上述漏洞在/ tmp foler处添加了不需要的可执行文件,并且它尝试通过ssh访问VM。 此漏洞还在您的系统上添加了cron进程,请注意也要删除该进程。

还请在〜/ .ssh文件夹中检查known_hosts和authorized_keys是否存在任何可疑的ssh公钥。攻击者可以添加其ssh密钥来访问您的系统。

希望这会有所帮助。

答案 2 :(得分:10)

这是一个Confluence漏洞https://nvd.nist.gov/vuln/detail/CVE-2019-3396,于2019年3月25日发布。它使远程攻击者可以通过服务器端模板注入在Confluence服务器或数据中心实例上实现路径遍历和远程代码执行。

可能的解决方案

  1. 请勿以root用户身份运行Confluence!
  2. 停止僵尸网络代理:kill -9 $(cat /tmp/.X11unix); killall -9 khugepageds
  3. 停止汇合: /app/bin/stop-confluence.sh
  4. 删除损坏的crontab:crontab -u -r
  5. 通过阻止访问前端服务器中的易受攻击的路径 / rest / tinymce / 1 / macro / preview 来堵塞漏洞;对于nginx,它是这样的:
    location /rest/tinymce/1/macro/preview {
        return 403;
    }
  1. 重新启动融合。

漏洞利用

包含两个部分:https://pastebin.com/raw/xmxHzu5P的shell脚本和http://sowcar.com/t6/696/1554470365x2890174166.jpg的x86_64 Linux二进制文件

该脚本首先杀死所有其他已知的特洛伊木马/病毒/僵尸网络代理,从 / tmp / kerberods 下载并生成二进制文件,然后通过 /root/.ssh/known_hosts 进行迭代。 >试图将自己传播到附近的机器。

大小为3395072且日期为4月5日16:19的二进制文件与LSD可执行打包程序(http://lsd.dg.com)一起打包。我还没有检查它的作用。看起来像一个僵尸网络控制器。

答案 3 :(得分:6)

似乎是漏洞。尝试像下面这样查看syslog(/ var / log / syslog,而不是jenkinks日志):class NavBars extends React { state = { value: 0, }; handleChange = (event, value) => { if (value == 0) {this.props.history.push('/tab1')} if(value == 1) {this.props.history.push('/tab2')} }; componentDidMount() { if(this.props.location.pathname == '/tab1') { this.setState({value: 0}) } else { this.setState({value: 1}) } } render() { const { classes } = this.props; const { value } = this.state; return ( <div className={classes.root}> <Tabs value={value} onChange={this.handleChange} classes={{ root: classes.tabsRoot, indicator: classes.tabsIndicator }} > <Tab disableRipple classes={{ root: classes.tabRoot, selected: classes.tabSelected }} label="Tab 1" /> <Tab disableRipple classes={{ root: classes.tabRoot, selected: classes.tabSelected }} label="Tab 2" /> </Tabs> {value == 0 && <p>Here is tab 1 content</p>} {value == 1 && <p>Here is tab 2 content</p>} </div> ); } }

如果是这样,请尝试停止jenkins,清除/ tmp dir并杀死所有以jenkins用户开头的pid。

如果cpu使用率下降,请尝试更新到jenkins的最新tls版本。接下来,jenkins启动后,更新jenkins中的所有插件。

答案 4 :(得分:0)

一个有效的解决方案是,因为刚刚重新创建了cron文件,所以它是清空jenkins的cronfile,我也更改了所有权,并使文件不可变。

这最终阻止了此过程的开始。

答案 5 :(得分:0)

在我的情况下,这使得构建随机失败,并出现以下错误:

  

Maven JVM意外终止,退出代码为137

我花了一些时间来关注Khugepageds的过程,因为我到处都读到这个错误,所以给定的解决方案是增加内存。

使用@HeffZilla解决方案解决了问题。