我有一个从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
#
请帮助我解决我如何解决这个问题。在过去的一周内遇到这个问题。 :|
答案 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