当前位置:  开发笔记 > 运维 > 正文

如何增加/ proc/pid/cmdline 4096字节限制?

如何解决《如何增加/proc/pid/cmdline4096字节限制?》经验,为你挑选了4个好方法。

对于具有很长类路径的Java应用程序,在使用ps时,我无法看到在arg列表末尾附近指定的主类.我认为这源于我的Ubuntu系统在/ proc/pid/cmdline上的大小限制.我怎样才能增加这个限制?



1> Kevin Cross..:

为了查看Java进程,jps非常有用.

这将为您提供主类和jvm args:

jps -vl | grep 



2> Robert Gambl..:

你不能动态地改变它,这个限制在内核中被硬编码到fs/proc/base.c中的PAGE_SIZE:

 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);


重新编译内核感觉就像搬到新房子,因为你不喜欢前一个人的沙发.
如果您愿意重新编译内核但仍然无法动态更改,则可以调整任何内容.

3> 小智..:

我暂时绕过4096字符命令行参数限制ps(或者更确切地说是/ proc/PID/cmdline)是通过使用一个小脚本来替换java命令.

在开发期间,我总是使用来自SUN的解压缩JDK版本,并且从不使用已安装的操作系统的JRE或JDK,无论是Linux还是Windows(例如,下载bin而不是rpm.bin).我不建议更改默认Java安装的脚本(例如,因为它可能会破坏更新或被覆盖或产生问题或......)

所以假设java命令在/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 $@

然后使脚本可运行

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

如果复制和粘贴上面的内容,你应该确保/x/jdks/jdk1.6.0_16_x32/bin/java中没有多余的空格而且#!/ bin/bash是第一行

完整的命令行最终在例如/tmp/java.26835.cmdline中,其中26835是shell脚本的PID.我认为命令行参数的数量也有一些shell限制,不记得但它可能是64K字符.

您可以更改脚本以从末尾的/tmp/java.PROCESS_ID.cmdline中删除命令行文本

在我获得命令行之后,我总是将脚本移动到像"java.script"这样的东西,并将实际的二进制java.orig复制(cp -a)回到java.我在达到4K限制时只使用脚本.

转义字符可能存在问题,甚至可能存在路径中的空格等问题,但它对我来说效果很好.



4> Matt..:

您可以使用jconsole访问原始命令行而不受所有长度限制.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有