সরাসরি প্রধান সামগ্রীতে চলে যান

ক্র্যাশ হওয়া জাভা ভার্চুয়াল মেশিন (JVM) এনালাইসিস করার সহজ উপায়

Introduction

সাধারণত যখন একটি জাভা প্রোগ্রাম বা অ্যাপ্লিকেশন কাজ করা বন্ধ করে দেয় বা "ক্র্যাশ" করে, তখন ডেভেলপারদের জন্য সেই সমস্যার কারণ খুঁজে বের করা বেশ কঠিন হয়ে পড়ে। বিশেষ করে যদি সমস্যাটি জাভা কোডের বদলে খোদ জাভা ভার্চুয়াল মেশিন (JVM)-এর ভেতরে হয়। আজকের এই আলোচনায় আমরা জানবো কিভাবে নতুন একটি প্রযুক্তি (JEP 528) ব্যবহার করে একটি বন্ধ হয়ে যাওয়া বা ক্র্যাশ হওয়া JVM থেকে দরকারী তথ্য উদ্ধার করা যায়। সহজ কথায়, একটি মৃত প্রসেসকে "পুনর্জীবিত" না করেও তার স্মৃতি বা মেমোরি থেকে ডাটা বের করে আনার টেকনিক নিয়েই এই আয়োজন।


JCMD এবং এর কাজ কী?

রেফারেন্স: ভিডিওর শুরু থেকে ০:৪০ পর্যন্ত দেখুন

JCMD (Java Command) হলো জাভা ডেভেলপমেন্ট কিট (JDK)-এর একটি ছোট কিন্তু অত্যন্ত শক্তিশালী টুল। এটি সাধারণত একটি চলমান (running) জাভা অ্যাপ্লিকেশনের ভেতরে কী হচ্ছে তা দেখার জন্য ব্যবহার করা হয়।

  • সহজ ব্যাখ্যা: মনে করুন আপনার একটি গাড়ি চলছে, আর JCMD হলো এমন একটি স্ক্যানার যা গাড়ি চলাকালীন ইঞ্জিন কত দ্রুত ঘুরছে বা তেলের অবস্থা কেমন তা বলে দিতে পারে। এটি দিয়ে মেমোরি ডাম্প (Heap dump) নেওয়া, থ্রেড চেক করা এবং গারবেজ কালেকশন (GC) পর্যবেক্ষণ করা যায়।

সহজ ভাষায় কঠিন শব্দ:

  • JVM (Java Virtual Machine): এটি একটি সফটওয়্যার যা আপনার লেখা জাভা কোডকে কম্পিউটারের বোঝার উপযোগী করে চালায়।

  • Production Application: যখন কোনো সফটওয়্যার ইন্টারনেটে লাইভ থাকে এবং আসল ইউজাররা ব্যবহার করে।


JEP 528: ক্র্যাশ হওয়া JVM-এর ময়নাতদন্ত

রেফারেন্স: ভিডিওর ১:১৯ থেকে ২:৩০ পর্যন্ত দেখুন

আগে JCMD শুধুমাত্র তখনই কাজ করতো যখন আপনার জাভা প্রোগ্রামটি চালু থাকতো। কিন্তু প্রোগ্রামটি যদি ক্র্যাশ করে (একদম বন্ধ হয়ে যায়), তখন JCMD আর কাজ করতে পারতো না। এই সমস্যার সমাধানের জন্যই এসেছে JEP 528। এটি ক্র্যাশ হওয়া JVM-এর "Core Dump" (ক্র্যাশের সময়কার মেমোরির একটি ছবি) এনালাইসিস করতে সাহায্য করে।

আমার ভাবনা: এটি অনেকটা ফরেনসিক রিপোর্টের মতো। মানুষ মারা যাওয়ার পর যেমন ডাক্তাররা তার শরীর পরীক্ষা করে মৃত্যুর কারণ বের করেন, JEP 528 ঠিক সেভাবেই একটি "মৃত" JVM প্রসেসের মেমোরি ইমেজ থেকে তথ্য বের করে আনে। ভিডিওতে এটিকে "reanimating a corpse's brain" বা একটি লাশের মস্তিষ্ককে সাময়িকভাবে জাগিয়ে তোলার সাথে তুলনা করা হয়েছে।

সহজ ভাষায় কঠিন শব্দ:

  • Core Dump: কোনো প্রোগ্রাম ক্র্যাশ করার মুহূর্তে কম্পিউটারের র‍্যামে (RAM) ওই প্রোগ্রামের যা যা তথ্য ছিল, তার একটি ফাইল।

  • Post-mortem Analysis: কোনো কিছু নষ্ট বা শেষ হয়ে যাওয়ার পর তার কারণ খুঁজে বের করার প্রক্রিয়া।


এই প্রযুক্তির সীমাবদ্ধতা বা লিমিটেশন

রেফারেন্স: ভিডিওর ২:৫০ থেকে ৩:৫০ পর্যন্ত দেখুন

সবকিছুই যে একদম ম্যাজিকের মতো হবে তা নয়, এর কিছু নিয়ম আছে: ১. একই আর্কিটেকচার: যে ধরণের অপারেটিং সিস্টেমে (যেমন: Linux বা Windows) প্রোগ্রামটি ক্র্যাশ করেছে, এনালাইসিসও সেই একই ধরণের সিস্টেমে করতে হবে। ২. অপারেটিং সিস্টেম: বর্তমানে এটি শুধু Linux এবং Windows-এ কাজ করে (Mac OS-এ এখনো পুরোপুরি নয়)। ৩. জাভা কোড চলবে না: যেহেতু JVM-টি আসলে মৃত, তাই এটি কোনো নতুন জাভা কোড রান করতে পারবে না। শুধুমাত্র আগে থেকে জমা থাকা ডাটা পড়তে পারবে।


কোডিং উদাহরণ ও ব্যাখ্যা

ভিডিওতে সরাসরি কোড দেখানো না হলেও, একটি JVM ক্র্যাশ করানোর জন্য সাধারণত Unsafe মেমোরি অ্যাক্সেস ব্যবহার করা হয়। নিচে একটি সহজ উদাহরণ দেওয়া হলো যা দিয়ে বোঝা যায় কীভাবে একটি প্রোগ্রাম ক্র্যাশ করতে পারে:

Java

// একটি সাধারণ কোড যা মেমোরি ক্র্যাশ ঘটাতে পারে (উদাহরণস্বরূপ)
import sun.misc.Unsafe;
import java.lang.reflect.Field;

public class CrashJVM {
    public static void main(String[] args) throws Exception {
        Field f = Unsafe.class.getDeclaredField("theUnsafe");
        f.setAccessible(true);
        Unsafe unsafe = (Unsafe) f.get(null);
        
        // ভুল মেমোরি অ্যাড্রেস অ্যাক্সেস করে JVM ক্র্যাশ করানো
        unsafe.putAddress(0, 0); 
    }
} 

ব্যাখ্যা:

  • এই কোডটি জাভার Unsafe লাইব্রেরি ব্যবহার করে সরাসরি কম্পিউটারের মেমোরিতে (RAM) হস্তক্ষেপ করার চেষ্টা করছে।

  • unsafe.putAddress(0, 0) লাইনটি এমন একটি মেমোরি জায়গায় ডাটা লেখার চেষ্টা করছে যা জাভার জন্য নিষিদ্ধ। ফলাফল হিসেবে JVM তৎক্ষণাৎ ক্র্যাশ করবে এবং একটি Core Dump ফাইল তৈরি হবে। যা পরবর্তীতে JCMD দিয়ে এনালাইসিস করা যাবে।


বিশ্লেষণ ও শেষ কথা

আমার বিশ্লেষণ ও বাস্তবতা: এই নতুন ফিচারটি ডেভেলপারদের জন্য একটি আশীর্বাদ। আগে ক্র্যাশ হওয়া সার্ভার থেকে তথ্য বের করা ছিল খড়ের গাদায় সুই খোঁজার মতো। কিন্তু এখন JCMD-এর মাধ্যমে আমরা খুব সহজেই দেখতে পারবো ক্র্যাশের ঠিক আগের মুহূর্তে কোন থ্রেডটি কাজ করছিল বা মেমোরিতে কী সমস্যা ছিল।

ভবিষ্যৎ সম্ভাবনা ও পরামর্শ: ১. বিকল্প টুল: JEP 528 আসার আগে JHSDB নামক একটি টুল ব্যবহার করা হতো, কিন্তু সেটি ব্যবহার করা বেশ জটিল ছিল। JCMD এখন সেই কাজকে অনেক সহজ করে দিচ্ছে। ২. পরামর্শ: আপনার প্রোডাকশন সার্ভারে যদি বারবার ক্র্যাশ হয়, তবে অবশ্যই Core Dump ফাইল সেভ করার অপশন চালু রাখুন। জাভা ২৭ বা তার পরবর্তী ভার্সনগুলোতে এই ফিচারটি পুরোপুরি পাওয়া যাবে। ৩. বাস্তবতা: এটি সাধারণ অ্যাপ ডেভেলপারদের চেয়ে যারা সিস্টেম লেভেলে বা বড় এন্টারপ্রাইজ লেভেলে কাজ করেন, তাদের জন্য বেশি কার্যকরী।

পরিশেষে বলা যায়, জাভা দিন দিন আরও বেশি ডিবাগ-ফ্রেন্ডলি হয়ে উঠছে, যা বড় বড় সফটওয়্যার মেইনটেইন করা আরও সহজ করে দিবে।

[

Analyzing Crashed JVMs - Inside Java Newscast #109

Java · 2.2K views

](http://www.youtube.com/watch?v=5KO_JKy9fNA)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

জাভা ফিডব্যাক এবং স্ট্রাকচার্ড কনকারেন্সি: বিবর্তনের গল্প

Introduction এই ভিডিওর নির্দিষ্ট অংশে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গোয়েটজ (Brian Goetz) আলোচনা করেছেন কীভাবে জাভার নতুন ফিচারগুলো তৈরি হয় এবং এতে সাধারণ ডেভেলপারদের মতামতের গুরুত্ব কতটুকু। বিশেষ করে Structured Concurrency -এর মতো জটিল ফিচারগুলো কেন বারবার 'Preview' অবস্থায় থাকে এবং কীভাবে কমিউনিটির ফিডব্যাক সেই ফিচারগুলোকে আরও নিখুঁত করতে সাহায্য করে, তা এখানে সহজভাবে বোঝানো হয়েছে। ১. ভালো ফিডব্যাক আসলে কী? ভিডিও রেফারেন্স: [ 34:53 ] ব্রায়ান গোয়েটজ বলছেন যে, জাভা টিম যখন কোনো নতুন ফিচারের খসড়া (Draft) বা প্রস্তাব (JEP) প্রকাশ করে, তখন তারা এমন কিছু জানতে চায় যা তারা নিজেরা আগে ভাবেনি। বিস্তারিত: একজন ডেভেলপার হিসেবে আমরা যখন কোনো নতুন ফিচার দেখি, আমাদের প্রথম প্রতিক্রিয়া হয় সেটার Syntax বা লেখার ধরন নিয়ে। কিন্তু ব্রায়ানের মতে, "এই লেখাটা কেন এমন হলো?" বা "এটা কোটলিন বা স্কালা-র মতো কেন নয়?"—এই ধরনের ফিডব্যাক খুব একটা কাজে আসে না। আসল দামী ফিডব্যাক হলো সেইটা, যা নতুন কোনো বাস্তব সমস্যা (Edge Case) তুলে ধরে। আমার চিন্তা: আপনি যদি কেবল দ...

ইমেজ ক্লাসিফিকেশন মডেল তৈরি ও প্রশিক্ষণ

ভূমিকা এই ভিডিওটিতে আমরা দেখবো কিভাবে একটি ইমেজ ক্লাসিফিকেশন মডেলকে প্রশিক্ষণ (Train) দিতে হয়। সহজ কথায়, আমাদের কাছে থাকা ছবিগুলো থেকে কম্পিউটারকে শেখানো যে, কোন ছবিটিতে কোন ব্যক্তি আছেন। এখানে আমরা ডাটাগুলোকে প্রসেস করা, মডেল নির্বাচন, এবং মডেলটি কতটা নির্ভুলভাবে কাজ করছে তা যাচাই করার প্রক্রিয়া শিখবো। ডাটা প্রিপারেশন বা প্রস্তুতি রেফারেন্স: [ 00:00 ] থেকে [ 01:03 ] মডেলকে প্রশিক্ষণ দেওয়ার আগে ডাটা ঠিকঠাক করা খুব জরুরি। ভিডিওতে দেখানো হয়েছে কিভাবে ছবিগুলো থেকে একটি ডিকশনারি বা তালিকার মতো স্ট্রাকচার তৈরি করা হয়েছে। সহজ ব্যাখ্যা: এখানে ইমেজগুলোকে সংখ্যায় রূপান্তর করা হয়েছে। কম্পিউটার সরাসরি ছবি বোঝে না, তাই সেগুলোকে ছোট ছোট ডাটা পয়েন্টের (Array) তালিকা হিসেবে সাজানো হয়েছে। যাতে মডেল বুঝতে পারে একটি ছবিতে কী কী বৈশিষ্ট্য আছে। মডেল নির্বাচন ও প্রশিক্ষণ (SVM) রেফারেন্স: [ 01:03 ] থেকে [ 04:43 ] এখানে Support Vector Machine (SVM) নামক একটি অ্যালগরিদম ব্যবহার করা হয়েছে। এটি সাধারণত ক্লাসিফিকেশনের কাজে খুব ভালো ফলাফল দেয়। পাইপলাইন (Pipeline): ডাটাকে স্কেল (Scale) করার জন্...