java文件从命令行执行但不是从浏览器(apache)执行?

时间:2014-04-28 14:00:53

标签: java php linux bash shell

我有一个从shell脚本触发的java文件。如果我在命令行执行shell脚本它正在执行java文件没有任何问题但是如果我从浏览器执行这个shell脚本(我有一个index.php在linux服务器上执行这个shell脚本)它没有执行java文件在shell脚本中。 shell脚本正确执行如果我从shell脚本中删除了java执行行。

以下是我从浏览器执行时收到的错误。

Error From browser:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007fcf589ac000, 2555904, 1) failed; error='Permission denied' (errno=13) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (malloc) failed to allocate 2555904 bytes for committing reserved memory. # An error report file with more information is saved as: # /tmp/hs_err_pid306.log

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 2555904 bytes for committing reserved memory.
# Possible reasons:
#   The system is out of physical RAM or swap space
#   In 32 bit mode, the process size limit was hit
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Use 64 bit Java on a 64 bit OS
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
#  Out of Memory Error (os_linux.cpp:2726), pid=306, tid=140528680765184

#
# JRE version:  (7.0_51-b13) (build )
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode linux-amd64 compressed oops)
Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#

请帮助我解决我如何解决这个问题。在过去的一周内遇到这个问题。 :|

2 个答案:

答案 0 :(得分:0)

许可问题。 您可能将此java文件作为与浏览器不同的用户运行。

包含更多信息的错误报告文件保存为:#/ tmp / hs_err_pid306.log 这个错误说的是什么?

答案 1 :(得分:0)

问题与HEAP内存有关。你没有设置足够的内存来运行应用程序。

在大多数32位Sun的JVM中,Java中的堆空间的默认大小为128MB,但其在JVM和JVM之间的差别很大,例如: 32位Solaris操作系统(SPARC Platform Edition)的缺省最大值和起始堆大小为-Xms = 3670K和-Xmx = 64M,64位系统上堆大小参数的缺省值增加了大约30%。此外,如果您在Java 1.5中使用吞吐量垃圾收集器,JVM的默认最大堆大小将是物理内存/ 4,默认初始堆大小将是物理内存/ 16。查找JVM的默认堆大小的另一种方法是使用默认堆参数启动应用程序并使用JDK 1.5以后可用的JConsole进行监视,在VMSummary选项卡上,您将能够看到最大堆大小。

顺便说一句,您可以根据应用程序的需要增加java堆空间的大小,我总是建议这样做以避免使用默认的JVM堆值。如果您的应用程序很大并且创建了大量对象,则可以使用JVM选项-Xms和-Xmx来更改堆空间的大小。 Xms表示Heap的起始大小,而-Xmx表示Java中Heap的最大大小。还有另一个名为-Xmn的参数,表示新一代Java堆空间的大小。唯一的事情就是你不能动态地改变Java中Heap的大小,你只能在启动JVM时提供Java Heap Size参数。我已经在Java程序员必须知道的10个JVM选项上共享了一些与Java堆空间和垃圾收集相关的更有用的JVM选项,你可能会觉得有用。

了解详情:http://javarevisited.blogspot.com/2011/05/java-heap-space-memory-size-jvm.html#ixzz30FsKCqeT

如果是tomcat,你必须在“catalina.sh”中设置这个内存变量。

例如:如果您通过命令行启动应用程序:

/ bin / java -Xms2048M -Xmx2048M Djava.util.logging.config.file = -Xms2048M -Xmx2048M