繁体   English   中英

Java文件从命令行执行,但不是从浏览器(Apache)执行?

[英]java file executed from command line but not from browser(apache)?

我有一个从Shell脚本触发的Java文件。 如果我在命令行执行shell脚本,它将执行Java文件而没有任何问题,但是如果我从浏览器中执行此shell脚本(我在Linux服务器中有执行该shell脚本的index.php),则不会执行Java文件在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
#

请帮助我解决该问题。.从上个星期开始,这个问题就卡住了。 :|

权限问题。 可能您以与浏览器不同的用户身份运行此java文件。

包含更多信息的错误报告文件另存为:#/tmp/hs_err_pid306.log此错误表示什么?

您的问题是HEAP内存。您没有设置足够的内存来运行该应用程序。

Java的堆空间的默认大小在大多数32位Sun的JVM上为128MB,但是在JVM与JVM之间差异很大,例如,32位Solaris操作系统(SPARC平台版)的默认最大和起始堆大小为-Xms = 3670K,并且-Xmx = 64M,并且64位系统上堆大小参数的默认值已增加了大约30%。 同样,如果您在Java 1.5中使用吞吐量垃圾收集器,则JVM的默认最大堆大小将为Physical Memory / 4,默认的初始堆大小将为Physical Memory / 16。 查找JVM的默认堆大小的另一种方法是使用默认堆参数启动应用程序,并使用JConsole监视,JConsole从JDK 1.5开始可用,在VMSummary选项卡上,您将能够看到最大堆大小。

顺便说一句,您可以根据应用程序的需要来增加Java堆空间的大小,我始终建议您避免使用默认的JVM堆值。 如果您的应用程序很大并且创建了很多对象,则可以使用JVM选项-Xms和-Xmx来更改堆空间的大小。 Xms表示Heap的起始大小,而-Xmx表示Java中Heap的最大大小。 还有一个名为-Xmn的参数,它表示新一代Java Heap Space的大小。 唯一的事情是您不能在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM