Kev*_*oss 27
为了查看Java进程,jps非常有用.
这将为您提供主类和jvm args:
jps -vl | grep <pid>
Run Code Online (Sandbox Code Playgroud)
Rob*_*ble 18
你不能动态地改变它,这个限制在内核中被硬编码到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);
Run Code Online (Sandbox Code Playgroud)
小智 8
我暂时绕过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
Run Code Online (Sandbox Code Playgroud)
然后创建一个脚本/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 $@
Run Code Online (Sandbox Code Playgroud)
然后使脚本可运行
chmod a+x /x/jdks/jdk1.6.0_16_x32/bin/java
Run Code Online (Sandbox Code Playgroud)
如果复制和粘贴上面的内容,你应该确保/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限制时只使用脚本.
转义字符可能存在问题,甚至可能存在路径中的空格等问题,但它对我来说效果很好.
| 归档时间: |
|
| 查看次数: |
17780 次 |
| 最近记录: |