ps พิมพ์ได้สูงสุด 4096 ตัวอักษรของบรรทัดคำสั่งของกระบวนการใด ๆ


19

เมื่อฉัน grep สำหรับกระบวนการ java ฉันได้รับด้านล่างเอาท์พุท แต่มัน จำกัด อยู่ที่ 4096 ตัวอักษรซึ่งเป็นผลให้ชื่อกระบวนการจริง (ซึ่งเป็น kafka.Kafka) ไม่ได้แสดงในgrepเอาท์พุท

นี่เป็นข้อ จำกัด ของ grep หรือไม่? มีวิธีการพิมพ์อักขระเกินขีด จำกัด 4096 หรือไม่?

ps -ef | grep java

java -Xmx6G -Xms6G -server -XX: + UseG1GC -XX: MaxGCPauseMillis = ka / kka-20 ข้อมูล -XX: InitiatingHeapOccupancyPercent = 35 -XX: + DisableExplicitGC -Djava.awt.headless -logs / kafkaServer-gc.log -verbose: gc -XX: + PrintGCDetails -XX: + PrintGCDateStamps -XX: + PrintGCTimeStamps -Dcom.sun.management.jmxremote.authenticate = false -Dcom sun.management.jmxremote.ssl = false -Dkafka.logs.dir = / x / kafka / data01 / kafka-app-logs -Dlog4j.configuration = ไฟล์: ./../ config / log4j.properties -cp: / x /home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/aopalliance-repackaged-2.4.0-b34.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10 -0.10.1.1 / bin /../ libs / argparse4j-0.5.0.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / การเชื่อมต่อ-api- 0.10.1.1.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/ ../libs/connect-file-0.10.1.1.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/connect-json-0.10.1.1.jar:/ x / home / bmcuser / Kafka-PayPal / kafka_2.10-0.10.1.1 / bin /../ libs / การเชื่อมต่อ-รันไทม์ 0.10.1.1.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10- 0.10.1.1/bin/../libs/guava-18.0.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/hk2-api-2.4.0 -b34.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / hk2-ระบุตำแหน่ง-2.4.0-b34.jar: / x / home / bmcuser / Kafka-PayPal / kafka_2.10-0.10.1.1 / bin /../ libs / hk2-utils-2.4.0-b34.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/ ถัง /../ libs / แจ็คสันคำอธิบายประกอบ-2.6.0.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jackson-core-2.6.3 ขวด: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / แจ็คสัน DataBind-2.6.3.jar: / x / home / bmcuser / Kafka-PayPal / kafka_2.10-0.10.1.1 / bin / ../libs/jackson-jaxrs-base-2.6.3.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jackson-jaxrs-json-provider-2.6 .3.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / แจ็คสันโมดูล JAXB-คำอธิบายประกอบ-2.6.3.jar: / x / home / bmcuser / Kafka-PayPal / kafka_2.10-0.10.1.1 / bin /../ libs / javassist-3.18.2-GA.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/ ถัง /../ libs / javax.annotation-API-1.2.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / javax.inject-1.jar : /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / javax.inject-2.4.0-b34.jar: / x / home / bmcuser / Kafka-PayPal / kafka_2.10-0.10.1.1 / bin /../ libs / javax.servlet-API-3.1.0.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/ .. /libs/javax.ws.rs-api-2.0.1.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jersey-client-2.22.2 ขวด:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jersey-common-2.22.2.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10 -0.10.1.1 / bin /../ libs / เสื้อภาชนะ-servlet-2.22.2.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / เสื้อภาชนะ-servlet-core-2.22.2.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / ย์ฝรั่ง-2.22.2.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jersey-media-jaxb-2.22.2.jar:/x/home/bmcuser/kafka-paypal/kafka_2 .10-0.10.1.1 / bin /../ libs / เสื้อเซิร์ฟเวอร์ 2.22.2.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / ท่าเทียบเรือที่มีต่อ-9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / ท่าเทียบเรือ-http-9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jetty-io-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jetty-security-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2 .10-0.10.1.1 / bin /../ libs / ท่าเทียบเรือเซิร์ฟเวอร์ 9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / ท่าเทียบเรือ-servlet-9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / ท่าเทียบเรือ-Servlets-9.2.15.v20160210 โถ: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / ท่าเทียบเรือ-util-9.2.15.v20160210.jar: / x / home / bmcuser / Kafka-PayPal /kafka_2.10-0.10.1.1/bin/../libs/jopt-simple-4.9.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/ kafka_2.10-0.10.1.1.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / kafka_2.10-0.10.1.1 ดังนั้น/libs/jetty-server-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jetty-servlet-9.2.15.v20160210 ขวด: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / ท่าเทียบเรือ-Servlets-9.2.15.v20160210.jar: / x / home / bmcuser / kafka- PayPal / kafka_2.10-0.10.1.1 / bin /../ libs / ท่าเทียบเรือ-util-9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/ ../libs/jopt-simple-4.9.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/kafka_2.10-0.10.1.1.jar:/ x / home / bmcuser / Kafka-PayPal / kafka_2.10-0.10.1.1 / bin /../ libs / kafka_2.10-0.10.1.1 ดังนั้น/libs/jetty-server-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jetty-servlet-9.2.15.v20160210 ขวด: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / ท่าเทียบเรือ-Servlets-9.2.15.v20160210.jar: / x / home / bmcuser / kafka- PayPal / kafka_2.10-0.10.1.1 / bin /../ libs / ท่าเทียบเรือ-util-9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/ ../libs/jopt-simple-4.9.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/kafka_2.10-0.10.1.1.jar:/ x / home / bmcuser / Kafka-PayPal / kafka_2.10-0.10.1.1 / bin /../ libs / kafka_2.10-0.10.1.1 ดังนั้น/libs/jetty-util-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jopt-simple-4.9.jar:/ x / home / bmcuser / Kafka-PayPal / kafka_2.10-0.10.1.1 / bin /../ libs / kafka_2.10-0.10.1.1.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10- 0.10.1.1/bin/../libs/kafka_2.10-0.10.1.1-so/libs/jetty-util-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jopt-simple-4.9.jar:/ x / home / bmcuser / Kafka-PayPal / kafka_2.10-0.10.1.1 / bin /../ libs / kafka_2.10-0.10.1.1.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10- 0.10.1.1/bin/../libs/kafka_2.10-0.10.1.1-so


คุณสามารถอ้างอิงโพสต์นี้ unix.stackexchange.com/questions/101681/…
Kamaraj

นั่นไม่ได้แก้ปัญหา ฉันเดาว่าข้อ จำกัด ที่นี่คือ 4096 ไบต์
zer0Id0l

3
ดูเหมือนว่าคุณอาจทำให้ classpath ของคุณสั้นลงโดยใช้ไวยากรณ์ของไวด์การ์ดดูstackoverflow.com/questions/219585/หรือคุณสามารถย้ายมันออกไปจาก commandline โดยใช้ env var CLASSPATH; สิ่งเหล่านี้มีโอกาสที่จะทำให้ commandline สั้นพอที่จะเห็นชื่อคลาสของคุณ หรือสำหรับกระบวนการ Java เท่านั้นหาก UID ของคุณมีสิทธิ์เข้าถึงและคุณมีหรือรับ JDK jpsจะแสดงชื่อคลาสโดยไม่คำนึงถึงการตัดบรรทัดคำสั่ง (อย่างน้อยบน Linux)
dave_thompson_085

1
@slebetman ฉันแน่ใจว่า OP รู้ตัว แต่สคริปต์ที่อาจสร้างสิ่งนี้ไม่ใช่
cat

1
ชื่อแสดงถึงว่าps -efพิมพ์ได้มากขึ้น แต่grepคือสิ่งที่เปลี่ยนแปลง ดูเหมือนว่า ... ไม่มีมูลความจริง
ชาร์ลส์ดัฟฟี่

คำตอบ:


35

นี่ไม่ใช่ข้อ จำกัดgrepแต่ของ/proc/PID/cmdline(ในทางเทคนิคการตัดสินใจการออกแบบไม่ใช่ข้อ จำกัด ) /proc/PID/cmdlineมีบรรทัดคำสั่งที่สมบูรณ์ของกระบวนการโดยมีคำสั่งหลักและอาร์กิวเมนต์คั่นด้วย ASCII NUL และไฟล์สิ้นสุดใน NUL ด้วย ดังนั้นgrepจะพิมพ์เนื้อหาไฟล์ทั้งหมดหากมีการแข่งขัน ( ps -efรับเนื้อหาของไฟล์นี้เป็นCMD)

ความยาวสูงสุดคือฮาร์ดโค้ดในเคอร์เนล (Linux) ไปที่PAGE_SIZE :

static int proc_pid_cmdline(struct task_struct *task, char * buffer)
{
        int res = 0;
        unsigned int len;
        struct mm_struct *mm = get_task_mm(task);
        if (!mm)
                goto out;
        if (!mm->arg_end)
                goto out_mm;    /* Shh! No looking before we're done */

        len = mm->arg_end - mm->arg_start;

        if (len > PAGE_SIZE)
                len = PAGE_SIZE;

ดังนั้น 4096 ไบต์สำหรับระบบดังกล่าว:

% getconf PAGE_SIZE
4096

นอกจากนี้หากคุณมีอักขระหลายไบต์จำนวนอักขระจะน้อยกว่า 4096 อย่างที่คุณสามารถจินตนาการได้


7
@ zer0Id0l คุณไม่สามารถเปลี่ยนแปลงได้PAGE_SIZE: เป็นคุณสมบัติของฮาร์ดแวร์ คุณจะต้องออกแบบฮาร์ดแวร์ใหม่ที่มีขนาดหน้าใหญ่ขึ้นหรือ (ลบง่ายกว่า ... ) เพื่อลบข้อ จำกัด ที่เนื้อหาของcmdlineถูกตัดทอนลงในหน้าเดียวโดยใช้การแมปหน่วยความจำหรือคัดลอกที่เหมาะสม
Gilles 'หยุดชั่วร้าย'

4
FWIW เมื่อ Giles บอกว่ามันเป็นคุณสมบัติของฮาร์ดแวร์เขาหมายถึงเป็นทรัพย์สินของ MMU ของ CPU ของคุณ ดังนั้นคุณต้องใช้ CPU ที่มี MMU ที่มีขนาดหน้ามากกว่า 4k หรือออกแบบสถาปัตยกรรม (และสร้างมาเธอร์บอร์ด + BIOS สำหรับมัน) ที่ใช้ MMU ภายนอกที่มีขนาดหน้าใหญ่กว่า 4k (จำไว้ว่าในอดีต MMU เคยเป็น ชิปภายนอก) หรือออกแบบ CPU ของคุณเอง (รวมถึงคอมไพเลอร์และอื่น ๆ ) ตัวเลือกอื่นคือการปรับเปลี่ยนเคอร์เนล linux เพื่อที่proc_pid_cmdlineจะไม่ใช้ PAGE_SIZE
slebetman

ข้อ จำกัด การออกแบบนี้ไม่จำเป็นต้องมีอยู่ อย่าลังเลที่จะเขียน proc_pid_cmdline อื่นที่ไม่มี
Joshua
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.