ওএস-স্তরের সিস্টেমের তথ্য পান


232

আমি বর্তমানে একটি জাভা অ্যাপ্লিকেশন তৈরি করছি যা অনেকগুলি বিভিন্ন প্ল্যাটফর্মে চালিত হতে পারে তবে মূলত সোলারিস, লিনাক্স এবং উইন্ডোজের বৈকল্পিক।

অন্তর্নিহিত ওএসে ব্যবহৃত বর্তমান ডিস্কের স্থান, সিপিইউ ব্যবহার এবং মেমরির মতো কেউ কী সফলভাবে তথ্য বের করতে সক্ষম হয়েছে? জাভা অ্যাপ্লিকেশন নিজেই কী গ্রাস করছে সে সম্পর্কে কী?

জেএনআই ব্যবহার না করেই আমি এই তথ্যটি পেতে চাই।


3
বিনা মেমরির দেখুন সম্মান সঙ্গে stackoverflow.com/a/18366283/231397 ( Runtime.getRuntime().freeMemory()। গৃহীত উত্তরে প্রস্তাবিত না আপনি বিনামূল্যে মেমরির পরিমাণ দেওয়া
খ্রিস্টান ফ্রাই

উত্তর:


206

রানটাইম ক্লাস থেকে কিছু সীমাবদ্ধ মেমরি তথ্য পেতে পারেন। আপনি যা খুঁজছেন তা সত্যিই এটি নয়, তবে আমি ভেবেছিলাম যে আমি এটি সম্পূর্ণতার জন্য সরবরাহ করব। এখানে একটি ছোট উদাহরণ। সম্পাদনা করুন: আপনি java.io.File ক্লাস থেকে ডিস্ক ব্যবহারের তথ্যও পেতে পারেন। ডিস্ক স্পেস ব্যবহারের জিনিসগুলির জন্য জাভা 1.6 বা তার বেশি প্রয়োজন।

public class Main {
  public static void main(String[] args) {
    /* Total number of processors or cores available to the JVM */
    System.out.println("Available processors (cores): " + 
        Runtime.getRuntime().availableProcessors());

    /* Total amount of free memory available to the JVM */
    System.out.println("Free memory (bytes): " + 
        Runtime.getRuntime().freeMemory());

    /* This will return Long.MAX_VALUE if there is no preset limit */
    long maxMemory = Runtime.getRuntime().maxMemory();
    /* Maximum amount of memory the JVM will attempt to use */
    System.out.println("Maximum memory (bytes): " + 
        (maxMemory == Long.MAX_VALUE ? "no limit" : maxMemory));

    /* Total memory currently available to the JVM */
    System.out.println("Total memory available to JVM (bytes): " + 
        Runtime.getRuntime().totalMemory());

    /* Get a list of all filesystem roots on this system */
    File[] roots = File.listRoots();

    /* For each filesystem root, print some info */
    for (File root : roots) {
      System.out.println("File system root: " + root.getAbsolutePath());
      System.out.println("Total space (bytes): " + root.getTotalSpace());
      System.out.println("Free space (bytes): " + root.getFreeSpace());
      System.out.println("Usable space (bytes): " + root.getUsableSpace());
    }
  }
}

7
আমি মনে করি "বর্তমানে জেভিএম দ্বারা ব্যবহৃত মোট স্মৃতি" কিছুটা বিভ্রান্তিকর। Javadoc যে ফাংশন আয় বলে "বর্তমানে বর্তমান ও ভবিষ্যত বস্তু, বাইটে মাপা জন্য উপলব্ধ মেমরি মোট পরিমাণ।" আরও বেশি মনে হচ্ছে স্মৃতি বাকী রয়েছে এবং ব্যবহৃত হচ্ছে না।
ডির্ক

@ ডার্ক: আমি আপনার মন্তব্যে সম্বোধনের জন্য শব্দটি আপডেট করেছি। ধন্যবাদ!
উইলিয়াম ব্রেন্ডেল

@ লিওনার্দো গালদিওলি: আমি এই ক্লাস এবং পদ্ধতিগুলির পারফরম্যান্সের বৈশিষ্ট্যগুলি জানি না, তবে তারা যদি গতির জন্য অনুকূলিত না হয় তবে আমি অবাক হব না। অন্যান্য উত্তরগুলি জেএমএক্স ব্যবহার করে কীভাবে নির্দিষ্ট তথ্য সংগ্রহ করবেন তা ব্যাখ্যা করে, যা দ্রুত হতে পারে।
উইলিয়াম ব্রেন্ডেল

15
এটি প্রশ্নের সঠিক উত্তর দেয় না। সেই সমস্ত ডেটা জেভিএমকে এবং ওএসকে নয় ...
আলভারো

আমি জানি যে এই বিষয়টি বেশ পুরানো। বাট: আপনার যদি সত্যই সিপিইউ কোরের পরিমাণ প্রয়োজন হয় তবে এই সমাধানটি ব্যবহার করবেন না। আমার প্রতিটি কোরের জন্য দুটি থ্রেড সহ একটি ডুয়াল-কোর সিপিইউ রয়েছে। JVM হার্ডওয়্যার কোরগুলি দেয় না, বরং সফ্টওয়্যার কোর / থ্রেড দেয়।
এফ_সচমিট

95

Java.lang.management প্যাকেজ আপনি রানটাইম চেয়ে একটি সম্পূর্ণ অনেক আরো তথ্য দিতে না - উদাহরণস্বরূপ আপনার গাদা মেমরি দিতে হবে ( ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()) অ গাদা মেমরি থেকে আলাদা ( ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage())।

আপনি প্রসেসের সিপিইউ ব্যবহার করতে পারেন (নিজের জেএনআই কোড না লিখে), তবে আপনাকে এটিকে কাস্ট করতে java.lang.management.OperatingSystemMXBeanহবে com.sun.management.OperatingSystemMXBean। এটি উইন্ডোজ এবং লিনাক্সে কাজ করে, আমি এটি অন্য কোথাও পরীক্ষা করে দেখিনি।

উদাহরণস্বরূপ ... আরও নির্ভুল পাঠ পড়ার জন্য getCpuUsage () পদ্ধতিটি আরও ঘন ঘন কল করুন।

public class PerformanceMonitor { 
    private int  availableProcessors = getOperatingSystemMXBean().getAvailableProcessors();
    private long lastSystemTime      = 0;
    private long lastProcessCpuTime  = 0;

    public synchronized double getCpuUsage()
    {
        if ( lastSystemTime == 0 )
        {
            baselineCounters();
            return;
        }

        long systemTime     = System.nanoTime();
        long processCpuTime = 0;

        if ( getOperatingSystemMXBean() instanceof OperatingSystemMXBean )
        {
            processCpuTime = ( (OperatingSystemMXBean) getOperatingSystemMXBean() ).getProcessCpuTime();
        }

        double cpuUsage = (double) ( processCpuTime - lastProcessCpuTime ) / ( systemTime - lastSystemTime );

        lastSystemTime     = systemTime;
        lastProcessCpuTime = processCpuTime;

        return cpuUsage / availableProcessors;
    }

    private void baselineCounters()
    {
        lastSystemTime = System.nanoTime();

        if ( getOperatingSystemMXBean() instanceof OperatingSystemMXBean )
        {
            lastProcessCpuTime = ( (OperatingSystemMXBean) getOperatingSystemMXBean() ).getProcessCpuTime();
        }
    }
}

10
এটা কম্পাইল ঢালাই প্রতিস্থাপন পেতে OperatingSystemMXBeanকরতে com.sun.management.OperatingSystemMXBeanএবং সমস্ত উদাহরণ ভূমিকা getOperatingSystemMXBean()সঙ্গে ManagementFactory.। আপনার যথাযথভাবে সমস্ত ক্লাস আমদানি করা দরকার।
tmarthal

2
আমি সবকিছুর জন্য 0 হিসাবে সিপিইউ ব্যবহার পাচ্ছি। আমি সিপিইউ ব্যবহারের সূত্রটি সিপিইউজেজ = প্রসেসসিপিটাইম / সিস্টেমটাইমে পরিবর্তিত করেছি। আমি সিপিইউ ব্যবহারের জন্য একটি মূল্য পাচ্ছি যা আমি বুঝতে পারি না।
রাজ

না 1.0 থেকে ফলে getCpuUsageগড় সিস্টেম তার ব্যবহার করছে availableProcessors 100% এ?
ব্যবহারকারী 45432222

2
@ রাজ বলেছিল আমি সর্বদা 0 পাই ... আপনি কীভাবে এই কোডটি ব্যবহার করবেন তার একটি উদাহরণ দিতে পারেন?
dm76

1
চেষ্টা করুন((double)( processCpuTime - lastProcessCpuTime )) / ((double)( systemTime - lastSystemTime ))
অ্যান্টনি ও।

43

আমি মনে করি হাইপারিক দ্বারা সিআরআই এপিআই বাস্তবায়ন করার সর্বোত্তম পদ্ধতি হ'ল । এটি বেশিরভাগ বড় অপারেটিং সিস্টেমের জন্য কাজ করে (আধুনিক যে কোনও জিনিসের কাছে রঙিন) এবং এটি দিয়ে কাজ করা খুব সহজ। বিকাশকারীরা তাদের ফোরামে এবং মেলিং তালিকাগুলিতে খুব প্রতিক্রিয়াশীল। আমি এটিও পছন্দ করি এটি জিপিএল 2 অ্যাপাচি লাইসেন্সযুক্ত । তারা জাভাতেও এক টন উদাহরণ সরবরাহ করে!

সিআরসি == সিস্টেম তথ্য, সংগ্রহ এবং প্রতিবেদনের সরঞ্জাম।


2
@ যোহান - অলস হবেন না! আপনি যে খুঁজে বের করতে পারেন পড়া লিঙ্ক ওয়েবপেজ। (এবং এটি "প্ল্যাটফর্ম স্বাধীন" বলতে কী বোঝায় তার উপর নির্ভর করে))
স্টিফেন সি

2
@ স্টেফেনসি: সিগার .dll ফাইলগুলি ব্যবহার করছে যা এটি প্ল্যাটফর্ম নির্ভর করে makes উচ্চ স্তরের এপিআই জাভা হতে পারে, এটি একটি ভিন্ন গল্প
লেবুর রস

1
@ কৃত্রিম_অন্তর্কতা হ্যাঁ, তবে এটি সর্বাধিক জনপ্রিয় প্ল্যাটফর্মগুলির জন্য লাইব্রেরি (সি তে লিখিত) সরবরাহ করে। এটি jvm নিজে থেকে বেশি প্ল্যাটফর্ম নির্ভর করে না। উচ্চ স্তরের জাভা এপিআই সমস্ত প্ল্যাটফর্মে সামঞ্জস্যপূর্ণ হওয়া উচিত।
যিশুরুন

8
সিগার ২০১০ সাল থেকে আপডেট হচ্ছে না এবং 64৪
আলভারো

1
এবং সিভি জেভিএম ক্র্যাশ করে তোলে, (যদিও মাঝে মাঝে) তবে আমি নিশ্চিত যে আপনি এই ঝুঁকি উত্পাদন নেবেন না।
একেএস

25

একটি জাভা প্রকল্প রয়েছে যা জেএনএ ব্যবহার করে (সুতরাং কোনও নেটিভ গ্রন্থাগার ইনস্টল করার জন্য নেই) এবং সক্রিয় বিকাশে রয়েছে। এটি বর্তমানে লিনাক্স, ওএসএক্স, উইন্ডোজ, সোলারিস এবং ফ্রিবিএসডি সমর্থন করে এবং র‌্যাম, সিপিইউ, ব্যাটারি এবং ফাইল সিস্টেমের তথ্য সরবরাহ করে।


কোনও স্থানীয় গ্রন্থাগার সম্ভবত বিভ্রান্তিকর নয়। প্রকল্পটি নেটিভ লাইব্রেরিগুলি ব্যবহার করে, এমনকি যদি সেগুলি কোনও লেখা না থাকে এবং আপনার দৃশ্যত কোনও ইনস্টল করার দরকার নেই।
স্টিফেন সি

1
তুমি ঠিক বলছো. জেএনএ লিবিফি ব্যবহার করে যার দেশীয় উপাদান রয়েছে। তবে সমস্ত উদ্দেশ্যে, দেখে মনে হচ্ছে কোনও দেশীয় গ্রন্থাগার নেই (অবশ্যই ইনস্টল করার জন্য কেউ নেই)।
ডিবি।

@ স্টেফেনসি যদিও আপনি যা বলছেন তা সঠিক, এটি বিভ্রান্তিকর কারণ এটি আরটি.জারের জন্য একই যা দেশীয় পদ্ধতিগুলিও আহ্বান করে। লোকেরা দেশীয় পদ্ধতিগুলির যত্ন নেওয়ার একমাত্র কারণ হ'ল তাদের সংকলন করতে এবং / অথবা ইনস্টল করতে হয় যা প্রায়শই একটি তুচ্ছ কাজ। যেহেতু লিবিফি এত বিস্তৃতভাবে গৃহীত হয়, পোর্ট করা হয় এবং ইনস্টল করা হয়, তাই সমস্যাগুলি প্রশমিত করে। সুতরাং, প্রযুক্তিগতভাবে আপনি সঠিক, কিন্তু ব্যবহারিকভাবে, এটি কোনও ব্যাপার নয়।
আরবিপি

@ আরবিপি - অভিজ্ঞ জাভা বিকাশকারীরা নেটিভ লাইব্রেরি এড়াতে পছন্দ করার কারণগুলির আরও একটি কারণ রয়েছে । একটি নেটিভ লাইব্রেরিতে বাগ রয়েছে (থ্রেড সুরক্ষা সংক্রান্ত সমস্যা বা মেমরি পরিচালনার সমস্যাগুলি সহ) হোস্ট জেভিএমকে অস্থিতিশীল করতে দায়বদ্ধ। এটি কোনও "কোনও বিষয় নয়" ইস্যু নয় ....
স্টিফেন সি

@ স্টেফেনসি ওয়েবলোগিক অ্যাপ্লিকেশন সার্ভারটি লিখেছেন কি আমাকে যথেষ্ট অভিজ্ঞ করে তুলেছে ?
আরবিপি

13

উইন্ডোজের জন্য আমি এই পথে চলেছি।

    com.sun.management.OperatingSystemMXBean os = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();

    long physicalMemorySize = os.getTotalPhysicalMemorySize();
    long freePhysicalMemory = os.getFreePhysicalMemorySize();
    long freeSwapSize = os.getFreeSwapSpaceSize();
    long commitedVirtualMemorySize = os.getCommittedVirtualMemorySize();

এখানে বিশদ সহ লিঙ্ক দেওয়া আছে।


11

System.getenv()প্যারামিটার হিসাবে প্রাসঙ্গিক পরিবেশের পরিবর্তনশীল নামটি ব্যবহার করে আপনি কিছু সিস্টেম-স্তরের তথ্য পেতে পারেন । উদাহরণস্বরূপ, উইন্ডোজে:

System.getenv("PROCESSOR_IDENTIFIER")
System.getenv("PROCESSOR_ARCHITECTURE")
System.getenv("PROCESSOR_ARCHITEW6432")
System.getenv("NUMBER_OF_PROCESSORS")

অন্যান্য অপারেটিং সিস্টেমের জন্য প্রাসঙ্গিক পরিবেশের ভেরিয়েবলের উপস্থিতি / অনুপস্থিতি এবং নাম পৃথক হবে।


1
এগুলি প্ল্যাটফর্ম নির্ভর কারণ সিস্টেমের মধ্যে ভেরিয়েবলের নাম আলাদা। পরিবেশের ভেরিয়েবল সম্পর্কিত ওরাকল নিবন্ধটি এটি জানায়। আমি সিস্টেমকে স্বাধীনভাবে পাওয়ার উপায়ও খুঁজে পাচ্ছি।
লেবু রস

লিনাক্সের আওতায় (উবুন্টু 17.10) পরিবেশে প্রসেসর সম্পর্কিত খুব আকর্ষণীয় তথ্য নেই।
pveentjer

8

মাভেনের মাধ্যমে ওএসএইচআই নির্ভরতা যুক্ত করুন:

<dependency>
    <groupId>com.github.dblock</groupId>
    <artifactId>oshi-core</artifactId>
    <version>2.2</version>
</dependency>

শতাংশে একটি ব্যাটারি ক্ষমতা বাম পান:

SystemInfo si = new SystemInfo();
HardwareAbstractionLayer hal = si.getHardware();
for (PowerSource pSource : hal.getPowerSources()) {
    System.out.println(String.format("%n %s @ %.1f%%", pSource.getName(), pSource.getRemainingCapacity() * 100d));
}

অন্যান্য মন্তব্যে বর্ণিত বেশিরভাগ তথ্য ওএসআইআই-র রয়েছে। এটি সম্ভব হলে ওএস নেটিভ কলগুলির মাধ্যমে এটি পেতে জেএনএ ব্যবহার করে।
ড্যানিয়েল উইদিস

6

Java.lang.management প্যাকেজে উপলব্ধ API গুলি দেখুন । উদাহরণ স্বরূপ:

  • OperatingSystemMXBean.getSystemLoadAverage()
  • ThreadMXBean.getCurrentThreadCpuTime()
  • ThreadMXBean.getCurrentThreadUserTime()

সেখানে অন্যান্য দরকারী জিনিসগুলির প্রচুর পরিমাণ রয়েছে।


2
অপারেটিংসিস্টেমএমএক্স.বিট.সেটমলডএভারেজ () উইন্ডোজগুলিতে প্রয়োগ করা হয়নি কারণ "এটি অত্যন্ত ব্যয়বহুল"
মাইকনোরসন

1
থ্রেডএমএক্সবিয়ান.জেটকন্ট্রেন্টথ্রেডকপিউটাইম () কেবল সেই থ্রেডটি কতক্ষণ চলছে তা কেবল ফেরত দেয়। সিপিইউ ব্যবহারের শতাংশ নয়।
মাইকনোরসন

5

সাধারণত, নিম্ন স্তরের ওএসের তথ্য পেতে আপনি ওএস নির্দিষ্ট কমান্ডগুলিতে কল করতে পারেন যা আপনাকে রানটাইম.এেক্সেক () এর মাধ্যমে আপনার পছন্দসই তথ্য দেয় বা লিনাক্সে / proc / * এর মতো ফাইলগুলি পড়তে পারে।


5

CPU- র ব্যবহার সোজা নয় - java.lang.management com.sun.management- মাধ্যমে অপারেটিং সিস্টেম MXBean। এটি আপনাকে অন্যান্য প্রক্রিয়াগুলিতে ব্যয় করা সিপিইউ সময়, বা এমনকি সিপিইউ সময়টি আপনার প্রক্রিয়া সম্পর্কিত সিস্টেম ক্রিয়াকলাপগুলি ব্যয় করার বিষয়ে বলে না।

উদাহরণস্বরূপ আমার কাছে একটি নেটওয়ার্ক-নিবিড় জাভা প্রক্রিয়া রয়েছে - এটি কেবলমাত্র চলমান জিনিস এবং সিপিইউ 99% এ থাকে তবে এর মধ্যে কেবল 55% "প্রসেসর সিপিইউ" হিসাবে রিপোর্ট করা হয়।

এমনকি এমএক্স শিমের সিপিইউ-সম্পর্কিত একমাত্র আইটেম হওয়া সত্ত্বেও এটি আমাকে অকেজো হওয়ার পরে "লোড গড়" দিয়ে শুরু করবেন না। যদি কেবল তাদের সূর্যের সূক্ষ্ম জ্ঞানের মধ্যে "getTotalCpuTime" এর মতো কিছু উন্মুক্ত হয় ...

গুরুতর সিপিইউ পর্যবেক্ষণের জন্য ম্যাট দ্বারা উল্লিখিত সিগারিকে সেরা বাজি বলে মনে হচ্ছে।


4

অন Windows, আপনি systeminfoকমান্ডটি চালাতে পারেন এবং নিম্নলিখিত কোড সহ উদাহরণস্বরূপ এর আউটপুট পুনরুদ্ধার করতে পারেন :

private static class WindowsSystemInformation
{
    static String get() throws IOException
    {
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec("systeminfo");
        BufferedReader systemInformationReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

        StringBuilder stringBuilder = new StringBuilder();
        String line;

        while ((line = systemInformationReader.readLine()) != null)
        {
            stringBuilder.append(line);
            stringBuilder.append(System.lineSeparator());
        }

        return stringBuilder.toString().trim();
    }
}

3

আপনি যদি Jrockit VM ব্যবহার করছেন তবে এখানে ভিএম সিপিইউ ব্যবহারের অন্য উপায় রয়েছে। রানটাইম শিম আপনাকে প্রসেসরের প্রতি সিপিইউ লোডও দিতে পারে। টমক্যাট পারফরম্যান্স পর্যবেক্ষকের জন্য আমি এটি শুধুমাত্র রেড হ্যাট লিনাক্সে ব্যবহার করেছি। এটি কাজ করার জন্য আপনাকে catalina.sh এ জেএমএক্স রিমোট সক্ষম করতে হবে।

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://my.tomcat.host:8080/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);     
MBeanServerConnection conn = jmxc.getMBeanServerConnection();       
ObjectName name = new ObjectName("oracle.jrockit.management:type=Runtime");
Double jvmCpuLoad =(Double)conn.getAttribute(name, "VMGeneratedCPULoad");

3

এটি এখনও বিকাশের অধীনে রয়েছে তবে আপনি ইতিমধ্যে jHardware ব্যবহার করতে পারেন

এটি একটি সাধারণ লাইব্রেরি যা জাভা ব্যবহার করে সিস্টেমের ডেটা স্ক্র্যাপ করে। এটি লিনাক্স এবং উইন্ডোজ উভয় ক্ষেত্রেই কাজ করে।

ProcessorInfo info = HardwareInfo.getProcessorInfo();
//Get named info
System.out.println("Cache size: " + info.getCacheSize());        
System.out.println("Family: " + info.getFamily());
System.out.println("Speed (Mhz): " + info.getMhz());
//[...]

দুর্দান্ত, তবে এটি আমার প্রয়োজনের সাথে বিরোধযুক্ত পেয়ারা এবং জেএনএ সংস্করণগুলি ব্যবহার করে (উদাঃ GLASSFISH-21367 দেখুন )।
lu_ko

হ্যালো, জেএনএ জেহার্ডওয়্যারের 0.8 সংস্করণে চালু করা হয়েছে। এটি কেবলমাত্র তাপমাত্রা এবং সেন্সরগুলির ডেটার জন্য ব্যবহৃত হয়। আপনার যদি সেই তথ্যের প্রয়োজন না হয় তবে আপনি 0.7 সংস্করণ ব্যবহার করতে পারেন। পেয়ারা একই জিনিস। সেক্ষেত্রে আপনাকে 0.6.3 সংস্করণ ব্যবহার করতে হবে।
অধ্যাপক_ফ্যালকেন

2

একটি সহজ উপায় যা ওএস স্তর সম্পর্কিত তথ্য পেতে ব্যবহার করা যেতে পারে এবং আমি আমার ম্যাকটিতে পরীক্ষা করেছি যা ভালভাবে কাজ করে:

 OperatingSystemMXBean osBean =
        (OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
    return osBean.getProcessCpuLoad();

আপনি এখানে অপারেটিং সিস্টেমের অনেক প্রাসঙ্গিক মেট্রিকগুলি পেতে পারেন


1

আরে আপনি জাভা / কম সংহত করে এটি করতে পারেন do ডাব্লুএমআই বৈশিষ্ট্য অ্যাক্সেস করে আপনি সমস্ত তথ্য পেতে পারেন।


0

জাভা কোডের অভ্যন্তরে 1 মিনিট, 5 মিনিট এবং 15 মিনিটের সিস্টেম লোড গড় পেতে , আপনি কমান্ডটি cat /proc/loadavgব্যবহার করে এবং এটি নীচের মত ব্যাখ্যা করে এটি করতে পারেন :

    Runtime runtime = Runtime.getRuntime();

    BufferedReader br = new BufferedReader(
        new InputStreamReader(runtime.exec("cat /proc/loadavg").getInputStream()));

    String avgLine = br.readLine();
    System.out.println(avgLine);
    List<String> avgLineList = Arrays.asList(avgLine.split("\\s+"));
    System.out.println(avgLineList);
    System.out.println("Average load 1 minute : " + avgLineList.get(0));
    System.out.println("Average load 5 minutes : " + avgLineList.get(1));
    System.out.println("Average load 15 minutes : " + avgLineList.get(2));

এবং কমান্ডটি কার্যকর করে এবং তারপরে এটি নীচে ব্যাখ্যা করে শারীরিক সিস্টেমের স্মৃতি পেতে free -m:

Runtime runtime = Runtime.getRuntime();

BufferedReader br = new BufferedReader(
    new InputStreamReader(runtime.exec("free -m").getInputStream()));

String line;
String memLine = "";
int index = 0;
while ((line = br.readLine()) != null) {
  if (index == 1) {
    memLine = line;
  }
  index++;
}
//                  total        used        free      shared  buff/cache   available
//    Mem:          15933        3153        9683         310        3097       12148
//    Swap:          3814           0        3814

List<String> memInfoList = Arrays.asList(memLine.split("\\s+"));
int totalSystemMemory = Integer.parseInt(memInfoList.get(1));
int totalSystemUsedMemory = Integer.parseInt(memInfoList.get(2));
int totalSystemFreeMemory = Integer.parseInt(memInfoList.get(3));

System.out.println("Total system memory in mb: " + totalSystemMemory);
System.out.println("Total system used memory in mb: " + totalSystemUsedMemory);
System.out.println("Total system free memory in mb: "   + totalSystemFreeMemory);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.