كيف يمكنني زيادة / إجراءات / PID / cmdline 4096 الحد بايت؟
سؤال
لبلدي تطبيقات جافا مع 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) "م>
لبرامج جافا القائمة حيث كنت مهتمة فقط في فحص سطر الأوامر وسائط حصلت الطبقة الرئيسية الخاصة بك، يمكنك تشغيل:
jps -m
وأنا متأكد من أنه إذا كنت فعلا رؤية الحجج اقتطاع في / إجراءات / $ معرف المنتج / cmdline ثم كنت تتجاوز في الواقع الحد الأقصى لطول الحجة التي يدعمها نظام التشغيل. بقدر ما استطيع ان اقول، في لينكس، وحجم يقتصر على حجم الصفحة الذاكرة. انظر "ملاحظة رطب" تقييد طول و> كمرجع.
والطريقة الوحيدة للالتفاف التي من شأنها أن تكون إعادة ترجمة النواة. إذا كنت ترغب في الذهاب إلى هذا الحد لحل هذه ثم قد تجد هذا المنصب مفيدة: "قائمة حجة جدا منذ فترة طويلة ": ما وراء الحجج والقيود
وإشارة إضافية:
ARG_MAX، الحد الأقصى لطول الحجج لعملية جديدة
وربما المعلمة "ث" إلى ملاحظة هي ما تريد. إضافة إلى اثنين من "ث" لزيادة الانتاج. ويحكي ملاحظة تجاهل عرض الخط من محطة.