【问题标题】:java file executed from command line but not from browser(apache)?java 文件从命令行执行,但不是从浏览器(apache)?
【发布时间】:2014-04-28 14:00:52
【问题描述】:

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

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

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 php linux bash shell


    【解决方案1】:

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

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

    【讨论】:

    • 我已经更新了日志文件。但我想说的是,当我从命令行执行它时没有问题,但我只从浏览器得到上述错误。
    【解决方案2】:

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

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

    顺便说一句,您可以根据应用程序的需要增加 Java 堆空间的大小,我总是建议这样做以避免使用默认的 JVM 堆值。如果您的应用程序很大并且创建了很多对象,您可以使用 JVM 选项 -Xms 和 -Xmx 来更改堆空间的大小。 Xms 表示堆的起始大小,而 -Xmx 表示 Java 中堆的最大大小。还有一个参数叫做-Xmn,它表示新一代Java Heap Space的大小。唯一的问题是您不能动态更改 Java 中的 Heap 大小,您只能在启动 JVM 时提供 Java Heap Size 参数。我在我的帖子 10 个 Java 程序员必须知道的 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

    【讨论】:

      猜你喜欢
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 2017-08-30
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多