Docker प्रोफाइलिंग
Pro फीचर
Docker प्रोफाइलिंग के लिए Pro लाइसेंस आवश्यक है।
स्वचालित खोज के साथ लोकल Docker कंटेनरों में चल रहे Java एप्लिकेशन को प्रोफाइल करें।
यह कैसे काम करता है
Section titled “यह कैसे काम करता है”GalataJ स्वचालित रूप से आपकी लोकल मशीन पर Docker कंटेनरों में चल रहे Java एप्लिकेशन खोजता है।
- अपने Docker कंटेनर को Java एप्लिकेशन के साथ शुरू करें
- अपने IDE में Profiler पैनल खोलें
- रिफ्रेश पर क्लिक करें — Docker कंटेनर JVM सूची में दिखाई देंगे
- कंटेनर चुनें और प्रोफाइलिंग शुरू करें
कोई कॉन्फ़िगरेशन आवश्यक नहीं। GalataJ कनेक्शन को स्वचालित रूप से संभालता है।
स्वचालित अटैच के लिए JDK अनुशंसित
यदि आपका कंटेनर JDK इमेज का उपयोग करता है, तो GalataJ बिना किसी अतिरिक्त कॉन्फ़िगरेशन के स्वचालित रूप से अटैच हो जाता है। यदि आपका कंटेनर JRE या अटैच सपोर्ट के बिना JDK का उपयोग करता है, तो आप -javaagent दृष्टिकोण का उपयोग करके प्रोफाइल कर सकते हैं। नीचे विकल्प: -javaagent का उपयोग देखें।
क्या खोजा जाता है
Section titled “क्या खोजा जाता है”GalataJ निम्न में चल रहे Java प्रोसेस खोजता है:
- Docker Desktop (Windows/macOS)
- Docker Engine (Linux)
- Docker Compose प्रोजेक्ट
जब तक कंटेनर आपकी लोकल मशीन पर चल रहा है, GalataJ इसे प्रोफाइल कर सकता है।
कंटेनरों की पहचान
Section titled “कंटेनरों की पहचान”JVM सूची में, Docker कंटेनर दिखाते हैं:
- कंटेनर नाम — वह नाम जो आपने कंटेनर को दिया
- इमेज नाम — उपयोग की जा रही Docker इमेज
- कंटेनर ID — पहचान के लिए छोटा ID
विकल्प: -javaagent का उपयोग
Section titled “विकल्प: -javaagent का उपयोग”यदि स्वचालित अटैच काम नहीं करता — उदाहरण के लिए, आपका कंटेनर JRE इमेज या रनटाइम अटैच का समर्थन न करने वाले JDK का उपयोग करता है — तो आप -javaagent का उपयोग करके स्टार्टअप पर प्रोफाइलर एजेंट लोड कर सकते हैं। यह विधि JRE सहित किसी भी Java इमेज के साथ काम करती है।
निम्नलिखित विकल्पों में से एक चुनें:
विकल्प 1: docker-compose.yml
Section titled “विकल्प 1: docker-compose.yml”अपनी सर्विस डेफिनिशन में निम्नलिखित जोड़ें — Dockerfile में कोई बदलाव आवश्यक नहीं:
services: my-app: # ... आपकी मौजूदा कॉन्फ़िगरेशन ... volumes: - ~/.galataj/agent/agent.jar:/opt/galataj-agent.jar:ro environment: - JAVA_TOOL_OPTIONS=-javaagent:/opt/galataj-agent.jar - GALATAJ_PACKAGE=com.mycompany.myapp extra_hosts: - "host.docker.internal:host-gateway"फिर अपनी सर्विसेज को रीस्टार्ट करें:
docker compose upविकल्प 2: Dockerfile
Section titled “विकल्प 2: Dockerfile”एजेंट JAR को अपनी प्रोजेक्ट डायरेक्टरी में कॉपी करें:
cp ~/.galataj/agent/agent.jar ./agent.jarफिर अपने Dockerfile में ENTRYPOINT से पहले ये लाइनें जोड़ें:
COPY agent.jar /opt/galataj-agent.jarENV JAVA_TOOL_OPTIONS="-javaagent:/opt/galataj-agent.jar"ENV GALATAJ_PACKAGE=com.mycompany.myappविकल्प 3: docker run
Section titled “विकल्प 3: docker run”फ़ाइल में कोई बदलाव आवश्यक नहीं — वॉल्यूम माउंट और एनवायरनमेंट फ्लैग सीधे पास करें:
docker run \ -v ~/.galataj/agent/agent.jar:/opt/galataj-agent.jar:ro \ -e JAVA_TOOL_OPTIONS="-javaagent:/opt/galataj-agent.jar" \ -e GALATAJ_PACKAGE=com.mycompany.myapp \ --add-host=host.docker.internal:host-gateway \ your-imageमहत्वपूर्ण नोट्स
Section titled “महत्वपूर्ण नोट्स”com.mycompany.myappको अपने एप्लिकेशन के बेस पैकेज से बदलें (जैसे, वह पैकेज जिसमें आपकी@SpringBootApplicationक्लास है)।- Linux पर,
extra_hosts(Compose) या--add-host(docker run) सेटिंग आवश्यक है ताकि कंटेनर होस्ट तक पहुंच सके। ऊपर के उदाहरण पहले से इसे शामिल करते हैं। - IDE विज़ार्ड का उपयोग करते समय, जनरेट किया गया कोड स्निपेट पहले से सही पैकेज भरा हुआ आता है।
सीमाएं
Section titled “सीमाएं”केवल लोकल
GalataJ केवल आपकी लोकल मशीन पर चल रहे Docker कंटेनरों को प्रोफाइल कर सकता है। रिमोट Docker होस्ट (SSH, रिमोट Docker API) वर्तमान में समर्थित नहीं हैं।
समस्या निवारण
Section titled “समस्या निवारण”कंटेनर दिखाई नहीं दे रहा
Section titled “कंटेनर दिखाई नहीं दे रहा”- सुनिश्चित करें कि कंटेनर चल रहा है (रुका हुआ नहीं)
- प्रोफाइलर पैनल में रिफ्रेश पर क्लिक करें
- सत्यापित करें कि कंटेनर में Java प्रोसेस है
- GalataJ काम कर रहा है यह सुनिश्चित करने के लिए Health Check चलाएं
प्रोफाइलिंग शुरू नहीं हो रही
Section titled “प्रोफाइलिंग शुरू नहीं हो रही”- सुनिश्चित करें कि आपके पास Pro लाइसेंस सक्रिय है
- जांचें कि Docker आपकी मशीन पर चल रहा है
- अपने IDE को रीस्टार्ट करने का प्रयास करें
अटैच विफल: jdk.attach उपलब्ध नहीं
यदि आपको इस तरह की एरर दिखाई दें:
- “jdk.attach module not available in container”
- “The container image must include JDK (not just JRE)”
- “NoClassDefFoundError: com/sun/tools/attach/AttachNotSupportedException”
कंटेनर JRE इमेज या अटैच सपोर्ट के बिना JDK का उपयोग कर रहा है।
समाधान A — JDK इमेज पर स्विच करें:
# पहले (स्वचालित अटैच के लिए विफल)FROM eclipse-temurin:17-jre
# बाद में (GalataJ के साथ काम करता है)FROM eclipse-temurin:17-jdkअनुशंसित JDK इमेज: eclipse-temurin:17-jdk, amazoncorretto:17, azul/zulu-openjdk:17।
इमेज को फिर से बनाएं और कंटेनर को दोबारा चलाएं, फिर प्रोफाइलिंग शुरू करें।
समाधान B — इसके बजाय -javaagent का उपयोग करें:
यदि आप JDK इमेज पर स्विच नहीं कर सकते, तो -javaagent दृष्टिकोण का उपयोग करें जो JRE सहित किसी भी Java इमेज के साथ काम करता है। ऊपर विकल्प: -javaagent का उपयोग देखें।