ฉันใช้เซิร์ฟเวอร์ Jenkins (2.138.2) ที่มี Mac ประมาณหนึ่งโหลหรือมากกว่านั้น แต่ละโหนดเหล่านี้ใช้ High Sierra ยกเว้นเพียงโหนดเดียวเท่านั้นที่ทำงาน Mojave
ปัญหาของฉันคือว่าเป็นระยะ ๆ (บางครั้งวันละครั้งบางครั้งสัปดาห์ละครั้งบางครั้ง 3 สัปดาห์โดยไม่มีปัญหาบางครั้ง 5 วันต่อวัน) หนึ่งหรือมากกว่าหนึ่งในโหนด Mac เหล่านี้ทิ้งการเชื่อมต่อของพวกเขาจากเซิร์ฟเวอร์เจนกินส์ ตรงกลางของบิลด์ทำให้เกิดการติดตามสแต็กดังนี้:
FATAL: command execution failed
01:24:49 java.nio.channels.ClosedChannelException
01:24:49 at org.jenkinsci.remoting.protocol.NetworkLayer.onRecvClosed(NetworkLayer.java:154)
01:24:49 at org.jenkinsci.remoting.protocol.impl.NIONetworkLayer.ready(NIONetworkLayer.java:179)
01:24:49 at org.jenkinsci.remoting.protocol.IOHub$OnReady.run(IOHub.java:795)
01:24:49 at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
01:24:49 at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
01:24:49 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
01:24:49 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
01:24:49 at java.lang.Thread.run(Thread.java:748)
01:24:49 Caused: java.io.IOException: Backing channel 'JNLP4-connect connection from X.X.X.X/X.X.X.X:52164' is disconnected.
01:24:49 at hudson.remoting.RemoteInvocationHandler.channelOrFail(RemoteInvocationHandler.java:214)
01:24:49 at hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:283)
01:24:49 at com.sun.proxy.$Proxy108.isAlive(Unknown Source)
01:24:49 at hudson.Launcher$RemoteLauncher$ProcImpl.isAlive(Launcher.java:1143)
01:24:49 at hudson.Launcher$RemoteLauncher$ProcImpl.join(Launcher.java:1135)
01:24:49 at hudson.tasks.CommandInterpreter.join(CommandInterpreter.java:155)
01:24:49 at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:109)
01:24:49 at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:66)
01:24:49 at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
01:24:49 at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
01:24:49 at hudson.model.Build$BuildExecution.build(Build.java:206)
01:24:49 at hudson.model.Build$BuildExecution.doRun(Build.java:163)
01:24:49 at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
01:24:49 at hudson.model.Run.execute(Run.java:1819)
01:24:49 at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
01:24:49 at hudson.model.ResourceController.execute(ResourceController.java:97)
01:24:49 at hudson.model.Executor.run(Executor.java:429)
มันอาจจะเกิดขึ้นบ่อยขึ้น แต่มันไม่ปรากฏขึ้นเพราะมันไม่ได้อยู่ในระหว่างการสร้าง แต่ฉันไม่มีหลักฐานที่จะสนับสนุนสิ่งนี้ มันดูเหมือนจะไม่เกิดขึ้นบน Windows หรือโหนด Linux
สิ่งที่ฉันได้ลอง:
- การปิดใช้งาน ARP บนโหนด Mac เนื่องจากมีการโพสต์ย้อนหลังไปถึง Mavericks ที่แนะนำว่ามีข้อผิดพลาด ARP: https://blog.macstadium.com/blog/osx-10-9-mavericks-bugs
- ตรวจสอบให้แน่ใจว่า Macs ทั้งหมดเสียบเข้ากับสวิตช์เครือข่ายโดยตรง (ไม่มี WiFi)
- ตรวจสอบให้แน่ใจว่ามีการกำหนดค่า Macs เพื่อไม่ให้หลับ
- ตรวจสอบบันทึกหลักของ Jenkins สำหรับข้อยกเว้นอื่น ๆ ไม่มีอะไรน่าสนใจเกี่ยวกับปัญหานี้
- พยายามทำซ้ำปัญหานี้โดยการเพิ่มความเร็วของโหลด CPU ไม่มีผลกระทบต่อการสูญเสียแพ็กเก็ต
- ตรวจสอบ LaunchAgent ที่ถูกต้องในทุกโหนด (ไม่มีบริการที่ซ้ำกันทำงานบริการทั้งหมดที่ทำงานในลักษณะเดียวกัน - ไคลเอนต์ JNLP)
- ฉันรู้ว่ามีข้อยกเว้นมากมายเกิดขึ้นในเวลาเดียวกันทุกคืน (01:06 น.) ดังนั้นฉันจึงตรวจสอบบันทึกของระบบในเครื่อง Mac เครื่องหนึ่งเพื่อค้นหา com.apple.mdworker.shared ทำงานทุกคืนเวลา 1:06 น. ฉันอ่านออนไลน์ว่านี่เป็นตัวทำดัชนีการค้นหา Spotlight ที่ทำงานและอาจทำให้เกิด "ความเกียจคร้านอย่างรุนแรง" ในขณะที่ทำงาน ฉันได้ปิดการใช้งานการค้นหา Spotlight ในช่องเดียวและจะรายงานผลลัพธ์หลังจากดูว่าปัญหาเกิดขึ้นอีกหรือไม่
อาการ:
- อย่างน้อย 50% แพ็กเก็ตหายไปประมาณ 5 นาทีต่อครั้ง
- java.nio.channels.ClosedChannelException และ Backing channel 'JNLP4 เชื่อมต่อการเชื่อมต่อจาก ... ' ข้อยกเว้น
- กล่อง Mac ส่วนใหญ่ใช้ High Sierra หรือ Mojave
ฉันสามารถให้ข้อมูลเพิ่มเติมได้ตามต้องการฉันทำอย่างดีที่สุดเพื่อจัดทำปัญหาและบางสิ่งที่ฉันได้ลอง ความช่วยเหลือใด ๆ ที่ได้รับการชื่นชมหวังว่าใครบางคนได้เห็นสิ่งนี้มาก่อน ฉันก็จะขอบคุณถ้าใครมีความคิดเกี่ยวกับวิธีการตรวจสอบนี้อย่างใกล้ชิดในวิธีอัตโนมัติ
อัพเดท
ฉันได้ตั้งค่าการตรวจสอบโหนดที่เป็นปัญหาผ่าน Grafana เพื่อติดตามการใช้งาน CPU และหน่วยความจำรวมถึงไบต์เครือข่ายที่ส่งและรับ ฉันยังตั้งค่าเซิร์ฟเวอร์ Xymon เพื่อให้แน่ใจว่าโหนดสามารถเข้าถึงได้โดย ping และส่งการแจ้งเตือนหากไม่มีอะไรใช้งานเป็นเวลา ~ 10 นาที
เหตุการณ์เกิดขึ้นซ้ำสองครั้งในสัปดาห์นี้สำหรับ Mac เครื่องหนึ่งโดยเฉพาะ (ใช้ Mojave อย่างน่าสนใจ) Grafana ไม่พบสิ่งผิดปกติใน CPU, หน่วยความจำหรือ Network IO อย่างไรก็ตาม Xymon รายงานว่าโหนดไม่ตอบสนองต่อ ping เมื่อเกิดเหตุการณ์ ดังนั้นกล่องจึงไม่ทำอะไรเลย แต่มันไม่ตอบสนองต่อการ ping เป็นเวลาอย่างน้อย 10 นาทีและทำให้การสร้างล้มเหลว
ปรับปรุงเพิ่มเติม
ฉันมี 5 โหนดออฟไลน์ในเวลาเดียวกันวันนี้ (~ 10: 34am) และไฟล์ install.log เต็มไปด้วยข้อความเช่นนี้:
<date> <hostname> deleted[443]: diskmanagement: [DMManager(PrivateMethods) clientConforms:error:]: currentThread=15975=0x3e67 expectedThread=8195=0x2003
ไม่มีใครรู้ว่า daemon ที่ถูกลบนี้คืออะไรและอาจพยายามทำอะไร ฉันสูญเสียสิ่งที่อาจฆ่าเอเจนต์เจนกินส์ในโหนด Mac เหล่านี้ทั้งหมดในเวลาเดียวกัน บางทีรีสตาร์ท Java หรือ Java exit () ที่ทำงานเป็นส่วนหนึ่งของกระบวนการล้างข้อมูลหรือไม่
ควรสังเกตว่าหลายโหนดเป็นข้อมูลสำรองของเครื่องเวลาของหนึ่งโหนดดังนั้นปัญหาน่าจะเหมือนกันในทุกโหนด