`
brandNewUser
  • 浏览: 453121 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

解决jenkins产生的日志过大以及一些衍生问题

阅读更多
 
 
 
jenkins使用一段时间后,会导致出现比较大的日志问题,经常占满硬盘空间(因为我们使用的硬盘大小20G,无额外存储要求)。在硬盘空间占满之后,会导致一些基本的命令都无法使用,譬如tab都不能出结果。
 
其中显示的日志,就例如下面的样例:
 
 
        question:      [DNSQuestion@1138295053 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@815573059 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@41696207 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@2028905592 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@1941181185 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@641688452 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@1165924047 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@1220425596 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@465635697 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@1186949838 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@2009482296 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@1316653163 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@1575193172 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@1622635068 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
        question:      [DNSQuestion@630525334 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
 
而且我们将已经定位到的文件删除掉,仍然不能释放空间,经过查看可以深层次发现其中的问题。
 
未释放磁盘空间原因
 
在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的文件夹结构上解除链接(unlink).然而假设文件是被打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用。而我删除的是jenkins的日志文件,如果jenkins服务没有停止,此时删除该文件并不会起到什么作用。
 
删除的时候文件应该正在被使用
 
当linux打开一个文件的时候,Linux内核会为每个进程在/proc/ 『/proc/nnnn/fd/文件夹(nnnn为pid)』建立一个以其pid为名的文件夹用来保存进程的相关信息,而其子文件夹fd保存的是该进程打开的全部文件的fd(fd:file descriptor)。
 
kill进程是通过截断proc文件系统中的文件能够强制要求系统回收分配给正在使用的的文件,这是一项高级技术,仅到管理员确定不会对执行中的进程造成影响时使用。应用程序对这样的方式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题,所以最终还是采用停止jenkins应用来解决该问题。
 

    当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除。当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间。

 
    我们发现剩余磁盘空间比较少时,回去删除一些大的临时文件或者log文件,如果删除之后会发现磁盘空间并未减少,那么可以通过“lsof”命令去查看正在使用该文件的进程,然后再重启该进程或者服务。
 
一般情况下,jenkins的部署常用几种方式:
 
  1. 通过系统服务安装并启动:service jenkins start/stop/restart,此时就可以通过命令来停止;
  2. 将war包部署至tomcat中,此时stop tomcat服务器就可以了。
 
而jenkins的日志问题经过google一番,找出相应的几个解决方法:
 
 
 
先考虑在jenkins上安装两个插件:
 
 

You can use the Logfilesizechecker Plugin:

This plugin monitors the size of the output file of a build and aborts the build if the log file gets too big.

Or, if this has also an impact on the runtime, the Build-timeout Plugin:

This plugin allows you to automatically abort a build if it's taking too long. Once the timeout is reached, Jenkins behaves as if an invisible hand has clicked the "abort build" button.

 
 
在jenkins中也已经意识到了该问题,并有了初步的解决方案:
 
 
根据朱迪的调研,考试使用下面的方式来解决此问题:
 
 
 
This seems to be due to DNS multicast as explained here: https://issues.jenkins-ci.org/browse/JENKINS-25369
Workaround: add -Dhudson.DNSMultiCast.disabled=true to JAVA_ARGS.
PS: I'm answering my own question here on Stack Overflow because I couldn't find the answer on Google easily, and it will be useful to other people running Jenkins.
  
 
日志中出现过多的DNS相关错误。
 
此外,还有一些其他需要值得注意的点,例如在脚本中如果涉及到启动进程的话,需要加入BUILD_ID,否则该进行启动后就会被kill掉。
 
如果不设置BUILD_ID,则jenkins在结束自己的脚本执行时会将创建的所有subprocess kill掉,BUILD_ID是Jenkins的一个环境变量,如果不随便改成一个值,那么由于startup.sh是fork一个进程执行的,Jenkins执行完所有脚本就会退出,带着subprocess一起死掉,具体的解释原因详见:
 
 
分享到:
评论
1 楼 ccor 2017-04-18  
linux下清空正在使用的文件命令:
:> xxx.log

相关推荐

    springboot486基于springboot的太原学院商铺管理系统--论文pf.zip

    同时,日志框架如Logback或Log4j用于收集和分析系统运行日志,帮助定位和解决问题。 这篇论文深入研究了如何利用SpringBoot的优势构建一个高效、可扩展的商铺管理系统,对于理解SpringBoot在实际项目中的应用具有很...

    springboot130社团管理系统.zip

    这个系统旨在解决社团日常运营中的各种问题,如会员管理、活动策划、资源分享等,以提升社团的工作效率。 首先,让我们深入了解SpringBoot的核心特性。SpringBoot简化了Spring应用程序的初始设置,通过自动配置和...

    Spring Tool Suite

    - STS内嵌了Spring Boot Dashboard,用于管理和运行Spring Boot应用,可以直观地查看应用状态、日志以及执行启动、停止、重启等操作。 7. **Spring Insight** - Spring Insight是用于实时监控和分析Spring应用的...

    Java毕业设计-基于springboot开发的车辆管理系统设计与实现-毕业论文(附毕设源代码).rar

    同时,日志记录(如使用Log4j或Logback)也是必不可少的,它可以帮助开发者追踪系统运行状况,定位并解决问题。 在测试方面,单元测试和集成测试可能会用到JUnit和Mockito等工具,确保每个功能模块的正确性。此外,...

    aptanta 工程实例

    6. **监控与日志管理**:对于工程实例,监控系统(如`Prometheus`,`Grafana`)和日志管理(如`ELK Stack`:Elasticsearch、Logstash、Kibana)是必不可少的,它们能帮助开发者追踪系统性能和问题。 7. **安全与...

    毕设项目:基于springboot+bootstrap的学生自习室预约管理系统.zip

    8. **日志管理**:使用Logback或Log4j记录系统日志,便于问题排查和系统监控。 9. **配置管理**:可能使用YAML或Properties文件来管理SpringBoot的配置,如数据库连接信息、服务器端口等。 10. **版本控制**:项目...

    莫提网盘(moti-cloud)是一个基于 SpringBoot 开发的标准 Java Web 项目。存储模式支持 .zip

    【莫提网盘(Moti-Cloud):SpringBoot 驱动的Java Web存储解决方案】 Moti-Cloud,一个以SpringBoot为核心构建的高效、标准化的Java Web项目,为用户提供了一个强大的在线存储服务。该项目充分利用了SpringBoot的...

    花云云盘——基于Java SpringBoot的云盘.zip

    9. **错误处理与日志记录**: 使用如Logback或Log4j进行日志记录,有助于调试和问题排查。异常处理机制确保服务的健壮性。 10. **持续集成与部署**: 使用Jenkins、GitLab CI/CD或其他持续集成工具,自动化构建、测试...

    基于SpringBoot,SpringCloud的微服务大型在线学习平台.zip

    【SpringBoot】是Spring框架的一个衍生版本,它简化了Java应用的初始搭建以及开发过程。SpringBoot通过内嵌Tomcat服务器,自动配置Spring框架及其他依赖,使得开发者能够快速地启动和运行应用程序。它还提供了许多开...

    基于springboot物流管理系统源码数据库.zip

    SpringBoot是Spring框架的一个轻量级衍生品,它简化了Spring应用的初始搭建以及开发过程。通过自动配置和“起步依赖”(Starter POMs),SpringBoot可以快速创建独立运行的、生产级别的Java应用。 2. **SSM框架...

    基于SpringBoot框架搭建的物联网数据采集系统服务器端,DAQ-IoT-SSM的升级版.zip

    9. **监控与日志**:Spring Boot Actuator提供了丰富的健康检查、指标、审计等监控功能,结合Logback或Log4j实现日志记录,有助于问题排查和性能优化。 10. **持续集成/持续部署(CI/CD)**: 使用Jenkins、GitLab CI/...

    Roses基于Spring Boot 2,是开源项目Guns的核心支撑层,亦可用于任何java项目支撑内核

    Spring Boot 2是Spring框架的一个衍生版本,旨在简化Java应用程序的初始设置和常规配置。它通过预设默认配置、自动配置类和起步依赖来实现快速启动和运行。Spring Boot 2的主要改进包括性能提升、更好的错误报告、更...

    springboot443旅游管理系统--论文pf.zip

    SpringBoot是Spring框架的一个衍生项目,它简化了Spring应用的初始搭建以及开发过程。SpringBoot 443版本是在HTTPS协议下运行,443是HTTPS的默认端口,强调了系统对数据传输安全性的重视。在旅游管理系统中,用户...

    基于springboot的小区物联网平台源码.zip

    SpringBoot是Spring框架的一个衍生版本,旨在简化Spring应用的初始搭建以及开发过程。 【描述】: 这个描述简单明了,表明提供的压缩包包含了一个基于SpringBoot技术的物联网系统源代码,该系统可能用于管理小区的...

    SpringBoot+Layui后台管理系统.zip

    在现代企业级Web应用开发中,SpringBoot和Layui的结合已经成为一种高效、快捷的解决方案。本文将深入探讨如何利用这两个技术栈构建一个强大的后台管理系统。 首先,SpringBoot是Spring框架的一个衍生版本,它简化了...

    分布式微服务电商系统搭建

    SpringBoot是Spring框架的衍生版本,旨在简化Spring应用的初始搭建以及开发过程。它内置了Tomcat服务器,集成了大量常用的Java EE库,如数据访问/集成、安全、消息等,使得开发者可以快速地创建独立的、生产级别的...

    郁郁苍苍---基于SpringBoot的多人社区项目.zip

    SpringBoot是Spring框架的一个衍生版本,它简化了初始化、配置以及运行Spring应用程序的过程。在本项目中,SpringBoot作为基础架构,提供了自动配置、内嵌式Web服务器(如Tomcat)、健康检查、安全管理和多种依赖的...

    毕设项目:基于SpringBoot+MyBatis-Plus 前后端分离的影院选座购票系统.zip

    首先,SpringBoot是Spring框架的一个轻量级衍生品,它简化了初始化和配置过程,使得开发人员可以快速启动项目。在本项目中,SpringBoot负责应用的核心结构和依赖管理,包括数据访问、安全控制、缓存等核心功能。通过...

    基于spring的校园新闻网站的设计与实现

    3. **Spring Boot**:Spring Boot是Spring的衍生项目,用于简化Spring应用的初始搭建以及开发过程。它默认配置了很多常见的功能,如嵌入式Tomcat服务器、自动配置Spring等,使得开发者能快速启动和运行项目。 4. **...

    TradingBot

    10. **持续集成/持续部署(CI/CD)**:如果项目规模较大,可能涉及到Git版本控制,以及Jenkins或GitHub Actions等工具进行自动化测试和部署。 以上就是“TradingBot”项目中可能涵盖的一些关键Python知识点。这个项目...

Global site tag (gtag.js) - Google Analytics