كيف يمكنني زيادة / إجراءات / PID / cmdline 4096 الحد بايت؟

StackOverflow https://stackoverflow.com/questions/199130

سؤال

لبلدي تطبيقات جافا مع classpaths طويلة جدا، لا استطيع ان ارى الطبقة الرئيسية المحددة بالقرب من نهاية القائمة وسيطة عند استخدام فرع فلسطين. وأعتقد أن هذا نابع من الحد الأقصى لحجم بلدي نظام أوبونتو على / بروك / PID / cmdline. كيف يمكنني زيادة هذا الحد؟

هل كانت مفيدة؟

المحلول

ولا يمكنك تغيير هذا حيوي، والحد هو الثابت تلوينها في نواة لPAGE_SIZE في خ / إجراءات / base.c:

 274        int res = 0;
 275        unsigned int len;
 276        struct mm_struct *mm = get_task_mm(task);
 277        if (!mm)
 278                goto out;
 279        if (!mm->arg_end)
 280                goto out_mm;    /* Shh! No looking before we're done */
 281
 282        len = mm->arg_end - mm->arg_start;
 283 
 284        if (len > PAGE_SIZE)
 285                len = PAGE_SIZE;
 286 
 287        res = access_process_vm(task, mm->arg_start, buffer, len, 0);

نصائح أخرى

لتبحث في العمليات جافا JPS أمر مفيد للغاية.

وهذا سوف تعطيك الدرجة وJVM الرئيسية سائط:

jps -vl | grep <pid>

وأنا مؤقتا التفاف على 4096 شخصية الحد سيطة سطر الأوامر من ملاحظة (أو بالأحرى / إجراءات / PID / cmdline) هو عن طريق استخدام برنامج نصي صغير ليحل محل الأمر جافا.

وخلال التنمية، أنا دائما استخدام إصدار JDK تفكيك من SUN وعدم استخدام JRE تثبيت أو JDK من نظام التشغيل لا يهم إذا ينكس أو ويندوز (مثل تحميل بن مقابل rpm.bin). أنا لا أوصي تغيير السيناريو لتثبيت جافا الافتراضية (على سبيل المثال، لأنه قد كسر التحديثات أو الحصول على الكتابة أو خلق مشاكل أو ...)

وحتى على افتراض الأمر جافا في /x/jdks/jdk1.6.0_16_x32/bin/java

أولا نقل ثنائي الفعلي بعيدا:

mv /x/jdks/jdk1.6.0_16_x32/bin/java /x/jdks/jdk1.6.0_16_x32/bin/java.orig

وبعد ذلك إنشاء برنامج نصي /x/jdks/jdk1.6.0_16_x32/bin/java أحب منها مثلا:

    #!/bin/bash

    echo "$@" > /tmp/java.$$.cmdline
   /x/jdks/jdk1.6.0_16_x32/bin/java.orig $@

ثم قم بإجراء النصي runnable

chmod a+x /x/jdks/jdk1.6.0_16_x32/bin/java

وفي حالة نسخ ولصق أعلاه، يجب عليك التأكد من أنه لا توجد مسافات إضافية في /x/jdks/jdk1.6.0_16_x32/bin/java و#! / بن / سحق هو السطر الأول

وسطر الأوامر كامل ينتهي في مثل /tmp/java.26835.cmdline حيث 26835 هو PID من شيل. أعتقد أن هناك أيضا بعض حد قذيفة على عدد من الحجج سطر الأوامر، لا يمكن أن تذكر ولكنه كان ربما 64K حرفا.

ويمكنك تغيير البرنامج النصي لإزالة النص سطر الأوامر من /tmp/java.PROCESS_ID.cmdline في نهاية

وبعد أن حصلت على سطر الأوامر، وأنا دائما نقل نصي لشيء من هذا القبيل "java.script" ونسخة (-A حزب المحافظين) في java.orig ثنائي الفعلية إلى جافا. أنا فقط استخدام البرنامج النصي عندما ضرب الحد 4K.

وربما تكون هناك مشاكل مع شخصيات نجا وربما حتى مسافات في مسارات أو تلك، ولكنه يعمل بشكل جيد بالنسبة لي.

ويمكنك استخدام jconsole للوصول إلى سطر الأوامر الأصلي دون كل الحدود طول.

ومن الممكن استخدام توزيعات لينكس الجديدة، حيث تمت إزالة هذا الحد، على سبيل المثال RHEL 6.8 أو في وقت لاحق

"و/ إجراءات / PID / cmdline حد طول الملف لقيادة الحزب الاشتراكى كان في السابق من الصعب ترميز في النواة إلى 4096 حرفا. هذا التحديث يجعل من طول / إجراءات / PID / cmdline غير محدود، والتي غير مفيدة بشكل خاص لإدراج العمليات مع وسائط سطر الأوامر طويلة. (BZ # 1100069) "

HTTPS: // الوصول. redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/6.8_Release_Notes/new_features_kernel.html

لبرامج جافا القائمة حيث كنت مهتمة فقط في فحص سطر الأوامر وسائط حصلت الطبقة الرئيسية الخاصة بك، يمكنك تشغيل:

jps -m

وأنا متأكد من أنه إذا كنت فعلا رؤية الحجج اقتطاع في / إجراءات / $ معرف المنتج / cmdline ثم كنت تتجاوز في الواقع الحد الأقصى لطول الحجة التي يدعمها نظام التشغيل. بقدر ما استطيع ان اقول، في لينكس، وحجم يقتصر على حجم الصفحة الذاكرة. انظر "ملاحظة رطب" تقييد طول كمرجع.

والطريقة الوحيدة للالتفاف التي من شأنها أن تكون إعادة ترجمة النواة. إذا كنت ترغب في الذهاب إلى هذا الحد لحل هذه ثم قد تجد هذا المنصب مفيدة: "قائمة حجة جدا منذ فترة طويلة ": ما وراء الحجج والقيود

وإشارة إضافية:
ARG_MAX، الحد الأقصى لطول الحجج لعملية جديدة

وربما المعلمة "ث" إلى ملاحظة هي ما تريد. إضافة إلى اثنين من "ث" لزيادة الانتاج. ويحكي ملاحظة تجاهل عرض الخط من محطة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top