Jvm ใช้เวลานานในการแก้ไข ip-address สำหรับ localhost


113

ดูเหมือนว่าฉันจะมีปัญหากับประสิทธิภาพของ "sbt test" (ซึ่งรวมถึงการค้นหาชื่อ localhost / ที่อยู่ IP) หลังจากอัปเกรดเป็น macOS Sierra ใน OS X เวอร์ชันก่อนหน้าจะใช้เวลาประมาณ 40-50 วินาทีจึงจะเสร็จสิ้น macOS Sierra ครั้งสูงกว่านั้นมาก ฉันวิ่งครั้งสุดท้ายประมาณ 15 นาที เวลาในการรวบรวมจะใกล้เคียงกับ 'El Capitan'

ฉันเป็นคนเดียวจากทีมของฉันที่ได้ลองใช้ macOS ใหม่นี้ดังนั้นฉันจึงไม่สามารถบอกได้ว่ามันเกิดขึ้นบน Mac ของฉันเท่านั้นหรือเป็นปัญหาทั่วไป

เพื่อนร่วมงานของฉันมีปัญหาคล้ายกันใน Ubuntu และเกี่ยวข้องกับการสร้างตัวเลขแบบสุ่มทำให้การทดสอบช้าลง - เวลาตอบสนองการบริการช้า: Java SecureRandom & / dev / random

น่าเสียดายที่ไม่ได้ผลสำหรับฉัน เดิมทีฉันลองใช้บน JDK 8u54 แล้วลองอัปเดตเป็น JDK 8u102 และนั่นก็ไม่ช่วยเช่นกัน

ปล. ฉันใช้ Macbook Pro กลางปี ​​2015 2.8GHz i7, 16GB ram, 1TB SSD


ฉันใช้gradle clean testและมีปัญหาเดียวกัน
Max Peng

นี่คือข้อบกพร่องที่รายงานไปยัง OpenJDK: bugs.openjdk.java.net/browse/JDK-8143378ได้รับการแก้ไขแล้วว่าซ้ำกับข้อบกพร่องอื่นซึ่งจะไม่ได้รับการแก้ไข มันควรจะเปิดใหม่
LórántPintér

คำตอบ:


328

ผมมีปัญหาเหมือนกัน. Tomcat ใช้เวลาจาก 15 วินาทีเป็น 6 นาทีเพื่อเริ่มต้นบริบทฤดูใบไม้ผลิหลังจากการอัพเกรด ... การปิดใช้งาน csrutils ไม่ได้ช่วยแก้ปัญหาให้ฉัน

ฉันแก้ไขปัญหาโดยการเพิ่มชื่อโฮสต์ Mac ของฉัน (เช่น Macbook.local หรืออะไรก็ตามที่เรียกว่า Mac ของคุณ) ใน/etc/hostsไฟล์ที่แมปกับที่127.0.0.1อยู่และสิ่ง::1นี้:

127.0.0.1   localhost mbpro.local
::1         localhost mbpro.local

หากคุณสนใจคุณสามารถดูรายละเอียดเกี่ยวกับปัญหาและแนวทางแก้ไขได้ที่นี่: https://thoeni.io/post/macos-sierra-java/

ในโพสต์ฉันยังเชื่อมโยงไปยังโครงการ githubเพื่อช่วยแก้ไขปัญหาและตรวจสอบความถูกต้องของโซลูชัน

ปัญหาเกี่ยวข้อง (ฉันเชื่อว่า) เกี่ยวกับวิธีการแก้ปัญหาชื่อ localhost และวิธีการที่คลาส java.net.InetAddr กำลังดึงที่อยู่ ฉันยืนยันกับเพื่อนร่วมงานไม่กี่คนและเห็นได้ชัดว่ามันไม่ได้เกิดขึ้นกับทุกคนที่อัปเกรดเป็น Sierra แต่ฉันยังคงตรวจสอบต้นตอของการเปลี่ยนแปลงนี้

วิธีแก้ปัญหาก็เหมือนกับที่antid0teใช้งานและทำงานได้ทันที


ปัญหาเดียวกัน ... และฉันสามารถยืนยันได้ว่าการปิดใช้งาน SIP ไม่ได้ผลสำหรับฉันเช่นกัน
ยืม

ใช้งานได้ดีคุณสามารถตรวจสอบกับโครงการ github github.com/thoeni/inetTester
christmo

21
เจอแล้ว! ไม่ใช่ชื่อ mac .. ชื่อโฮสต์ การพิมพ์ "hostname" ในเทอร์มินัลสามารถระบุชื่อโฮสต์ที่ถูกต้องได้
VK321

1
ยังคงเห็นสิ่งนี้บน OSX 10.14.2 ในอีกหลายปีต่อมา ขอบคุณมากสำหรับการแก้ไข
Malcolm Crum

1
macOS Mojave 10.14.4 ยังคงมีปัญหา การต่อท้ายชื่อโฮสต์หลังlocalhostกับ IPv4 และ IPv6 loopback lines ( 127.0.0.1, ::1) ยังคงยืนยันการแก้ไข
สุนัข

43

คำตอบที่ถูกต้อง: Jvm ใช้เวลานานในการแก้ไขที่อยู่ ip สำหรับ localhost

สำหรับคนขี้เกียจ:

sudo sed -i bak "s^127\.0\.0\.1.*^127.0.0.1 localhost $(hostname)^g" /etc/hosts
sudo sed -i bak "s^::1.*^::1 localhost $(hostname)^g" /etc/hosts
sudo ifconfig en0 down
sudo ifconfig en0 up

4
สุดยอด! สิ่งนี้ช่วยเพิ่มเวลาในการเปิดตัว minecraft ของฉันจาก 12 วินาทีเป็น 0.5 วินาที
Bob

@camikiller ฉันเห็น 2 ค่าที่แตกต่างกันสำหรับชื่อโฮสต์เทียบกับการแชร์> ชื่อคอมพิวเตอร์โปรดอธิบายว่าควรใช้ค่าใด
vikramvi

ทางออกที่ดีกว่าคืออัปเกรด MacOS ของคุณ @vikramvi
camikiller

@camikiller ต่อมาฉันทำต่อapple.stackexchange.com/questions/66611/…ถึงจะมีชื่อเดียวกัน แต่ก็ยังใช้ไม่ได้ ฉันต้องทำการตั้งค่าอื่น ๆ ในการแชร์หรือไม่?
vikramvi

@vikramvi ลองแก้ไข/etc/hostsไฟล์ด้วยตนเองแล้วเพิ่ม 2 โฮสต์
camikiller

6

ผมมีปัญหาเดียวกัน. แอปพลิเคชันสปริงบูตของฉันใช้เวลา 60 วินาทีในการเริ่มต้นบน Sierra เทียบกับ 25 วินาทีบน Yosemite

ขณะทำการดีบักฉันตระหนักว่าปัญหามาจาก InetAddress.getLocalHost () ฉันเปลี่ยนไฟล์โฮสต์ของฉันเพื่อเพิ่มชื่อโฮสต์ของฉันสำหรับ 127.0.0.1 และ :: 1 และตอนนี้แอปพลิเคชันเริ่มเร็วเท่าเดิม


2
สวัสดีฉันพบคำอธิบายระดับสูงนี้หากช่วยได้ (แต่ก็ยังไม่ชัดเจนว่ามีอะไรเปลี่ยนแปลงในรุ่น MacOS Sierra): "เมื่อคุณขอชื่อโฮสต์ JDK จะแก้ไขเป็นที่อยู่ IP จากนั้นจะพยายามค้นหาที่อยู่เหล่านั้นแบบย้อนกลับ และตรวจสอบว่าผลลัพธ์อย่างน้อยหนึ่งรายการแมปกลับไปยังชื่อโฮสต์อินพุตการค้นหาแบบย้อนกลับนี้ช้าความช้าไม่ได้ จำกัด อยู่ที่ JVM สิ่งใด ๆ บน OS ที่พยายามทำการค้นหาแบบย้อนกลับดังกล่าวจะช้าหากไม่มี การกำหนดค่าที่เหมาะสมใน / etc / hosts " (จากgithub.com/spring-projects/spring-boot/issues/7087 )
thoeni

3

การเปิดใช้งานเช่น System Preferences> Sharing> Remote Login ส่งผลให้ชื่อโฮสต์ถูกกำหนดที่อยู่ IP โดยอัตโนมัติ

เนื่องจากผู้คนพบปัญหาหลังจากการอัปเกรดจึงควรสมมติว่า 10.12 เปลี่ยนแปลงวิธีการแก้ไขชื่อโฮสต์กล่าวคืออย่างน้อยด้วย 10.11 ชื่อโฮสต์จะได้รับการแก้ไขเสมอในขณะที่ 10.12 จะได้รับการแก้ไขก็ต่อเมื่อเปิดใช้บริการใน System Preferences> การแบ่งปัน (คนที่มี 10.11 สามารถยืนยันได้)


ฉันมี 10.12.5 แต่วิธีแก้ปัญหาของคุณไม่ได้ผล คุณมีรุ่นไหน
vikramvi

@vikramvi ฉันมี 10.12.6 และสำหรับการติดตั้งของฉันยังคงใช้งานได้ตามที่อธิบายไว้ ด้วยไฟล์มาตรฐาน / etc / hosts และการแชร์ถูกปิดใช้งานping $ (hostname)ล้มเหลวโดยมีข้อผิดพลาดของโฮสต์ที่ไม่รู้จัก เมื่อเปิดใช้งานการแบ่งปันชื่อโฮสต์จะถูกแก้ไขเป็น IP ของ VLAN ของฉัน สำหรับ Java (8u141) การเรียกInetAddress.getLocalHost ()จะใช้เวลา 5 วินาทีในกรณีที่การแชร์ถูกปิดใช้งาน เมื่อเปิดใช้งานการแบ่งปันเวลาดำเนินการจะลดลงเหลือ 13 มิลลิวินาที
jurajw

วิธีนี้ใช้งานได้ (แม้ว่าจะแปลกจริงๆ) โดยทั่วไปแม้ว่าจะมีการตรวจสอบ "การเข้าสู่ระบบระยะไกล" แล้วให้ยกเลิกการเลือกแล้วตรวจสอบอีกครั้ง สิ่งต่างๆเริ่มทำงานอีกครั้ง คุณต้องทำครั้งเดียว / บูต LOL โปรดทราบว่าหากคุณเคยฆ่ากระบวนการ "mDNS" (ก่อนหน้านี้) คุณจะต้องทำเคล็ดลับนี้เพื่อดึงที่อยู่. local กลับมาเลย หรือใช้วิธี / etc / hosts เพื่อการแก้ไขที่ถาวรยิ่งขึ้น
rogerdpack

1

ฉันคิดว่ามันเป็นปัญหาทั่วไปของ OS ใหม่ ฉันมีปัญหาที่คล้ายกัน: ฉันมีเว็บแอปพลิเคชันที่ใช้กับแมวตัวผู้ ใน El Capitan มันเริ่มต้นใน 10 วินาทีตอนนี้ใช้เวลา 95 วินาทีและไคลเอนต์ (แอพเดสก์ท็อปที่ใช้ Swing) ไม่สามารถเชื่อมต่อกับมันได้ (หรืออย่างน้อยก็ใช้เวลามาก) ฉันคิดว่ามันเป็นสิ่งที่เกี่ยวกับการสื่อสารบนเครือข่ายเพราะแอปคอนโซลทดสอบแบบธรรมดาทำงานได้ดี


1
การปิด SIP ช่วยแก้ปัญหาของฉันได้ macossierra-slow.com/…
Andras Gyetvan

1

มันเป็นปัญหาแปลก ๆ Mac Sierra 10.12 (16A323)หลังจากติดตั้งการปรับปรุงไปยัง ในไฟล์โฮสต์ที่มีด้านล่างจัดเรียงปัญหา

::1         localhost <myhostname>.local   <--- Was already present
127.0.0.1   localhost <myhostname>.local   <--- Solved the tomcat loading issue

คุณสามารถรับmyhostnameด้วยคำสั่ง$hostnameที่ใดก็ได้ในเทอร์มินัล


0

คำตอบที่ยอมรับช่วยฉันได้! เพียงเพิ่มสิ่งนี้ที่นี่เพื่ออธิบายสิ่งที่ฉันคิดว่าปัญหาสำหรับฉันคือ:

ชื่อโฮสต์ของฉันคือ "Mac ของฉัน" ซึ่งไม่สามารถแก้ไขได้ ในการตั้งค่าแสดงให้ฉันเห็นว่าคอมพิวเตอร์สามารถจ่าหน้าด้วย mymac.local

ฉันคิดว่ามันเป็นพื้นที่และเปลี่ยนชื่อ mac ของฉันเป็น "my.mac" แต่ถึงอย่างนั้นก็ไม่ได้ช่วยอะไรเนื่องจาก dns ที่เพิ่มโดยอัตโนมัติยังคงเป็น mymac.local

การเพิ่ม my.mac ไปยัง / etc / hosts ช่วยได้แล้ว

ฉันเดาว่าปัญหาที่แท้จริงคืออะไร: สิ่งนี้จะเกิดขึ้นก็ต่อเมื่อชื่อคอมพิวเตอร์ของคุณมีสิ่งที่ไม่ใช่ตัวอักษร สิ่งนี้จะถูกลบออกโดยอัตโนมัติโดยระบบปฏิบัติการและชื่อโฮสต์และรายการ DNS ไม่ตรงกัน (ซึ่งสามารถแก้ไขได้ด้วยตนเองเพิ่ม)


1
ฉันคิดว่าปัญหานั้นลึกกว่านั้น ... ชื่อโฮสต์ของฉันเป็นตัวอักษรอัลฟ่าปกติทั้งหมด แต่การเพิ่มลงใน / etc / hosts ช่วยแก้ปัญหาแปลก ๆ สำหรับฉันได้
Magnus

0

ฉันประสบปัญหาเดียวกันบน Mac ของฉัน

เมื่อฉันเปลี่ยนชื่อโฮสต์หลักและชื่อโฮสต์ Bonjour ให้มีเฉพาะอักขระที่เป็นตัวเลขและตัวอักษรก็ช่วยแก้ปัญหานี้ได้ ความคิดนี้มาจากเพื่อนร่วมงานที่ได้อ่านคำแนะนำที่ไหนสักแห่งเมื่อเขาประสบปัญหาคล้าย ๆ กัน (เขาจำไม่ได้ว่าที่ไหน)

รับแรงบันดาลใจจากคำแนะนำนี้เหล่านี้เป็นขั้นตอนที่ผมตาม:

ขั้นแรกเปลี่ยนชื่อโฮสต์หลัก

sudo scutil --set HostName <new host name>

เช่น:

sudo scutil --set HostName eggsandwich

จากนั้นเปลี่ยนชื่อโฮสต์ Bonjour (เพื่อความสมบูรณ์ฉันไม่เคยลองโดยไม่มีขั้นตอนนี้ดังนั้นอาจไม่จำเป็น)

sudo scutil --set LocalHostName <new host name>

เช่น:

sudo scutil --set LocalHostName eggsandwich

ตอนนี้รีสตาร์ทกระบวนการ java ที่คุณประสบปัญหาและหวังว่าจะไม่ค้างอีกต่อไป

ในบันทึกด้านข้างสิ่งนี้ยังช่วยแก้ปัญหาอื่นที่ฉันพบเมื่อแท็บใหม่ใน Terminal ไม่เริ่มทุบตีในไดเรกทอรีเดียวกันแม้ว่าฉันจะตั้งค่าไว้ก็ตาม ฉันไม่มีคำอธิบายว่าทำไมถึงเกิดขึ้น แต่ฉันยินดีมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.