这些java错误的原因可能是什么?

这些java错误的原因可能是什么?,java,peoplesoft,Java,Peoplesoft,有人知道这些java错误的原因吗 java版本应该是1.4.1_05。这与PeopleSoft有关 "VM Thread" prio=5 tid=0x00B8EF28 nid=0x5f8 runnable "VM Periodic Task Thread" prio=10 tid=0x00CF4CF8 nid=0x648 waiting on condition "Suspend Checker Thread" prio=10 tid=0x00CF5760 nid=0x64c runnabl

有人知道这些java错误的原因吗

java版本应该是1.4.1_05。这与PeopleSoft有关

"VM Thread" prio=5 tid=0x00B8EF28 nid=0x5f8 runnable 
"VM Periodic Task Thread" prio=10 tid=0x00CF4CF8 nid=0x648 waiting on condition 
"Suspend Checker Thread" prio=10 tid=0x00CF5760 nid=0x64c runnable 
<Nov 17, 2011 1:41:46 PM GMT+08:00> <Error> <HTTP> <BEA-101017> <[ServletContext(id=21840659,name=PORTAL,context-path=)] Root cause of ServletException.
java.lang.OutOfMemoryError: unable to create new native thread
                at java.lang.Thread.start(Native Method)
                at bea.jolt.NwHdlr.start_threads(NwHdlr.java:1982)
                at bea.jolt.NwHdlr.openConnection(NwHdlr.java:879)
                at bea.jolt.CMgr.connect(CMgr.java:71)
                at bea.jolt.JoltSession.logon(JoltSession.java:246)
                at bea.jolt.JoltSession.<init>(JoltSession.java:125)
                at psft.pt8.net.JoltSessionWrapper.<init>(JoltSessionWrapper.java:67)
                at psft.pt8.net.JoltSessionPool.createConnection(JoltSessionPool.java:373)
                at psft.pt8.net.JoltSessionPool.getJoltSession(JoltSessionPool.java:220)
                at psft.pt8.net.NetSession.getJoltSession(NetSession.java:484)
                at psft.pt8.net.NetReqRepSvc.sendRequest(NetReqRepSvc.java:526)
                at psft.pt8.net.NetService.requestService(NetService.java:141)
                at psft.pt8.net.NetReqRepSvc.requestService(NetReqRepSvc.java:328)
                at psft.pt8.net.NetSession.connect(NetSession.java:269)
                at psft.pt8.net.NetSession.<init>(NetSession.java:203)
                at psft.pt8.jb.JBEntry.connectWithBlob(JBEntry.java:720)
                at psft.pt8.jb.JBEntry.connect(JBEntry.java:654)
                at psft.pt8.auth.PSAuthenticator.authenticate(PSAuthenticator.java:546)
                at psft.pt8.psreports.onLogin(psreports.java:216)
                at psft.pt8.psreports.onAction(psreports.java:321)
                at psft.pt8.psreports.service(psreports.java:181)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
                at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)
                at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)
                at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
                at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
                at psft.pt8.psfilter.doFilter(psfilter.java:71)
                at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
                at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6372)
                at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
                at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
                at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3643)
                at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)
                at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
                at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
>
“VM线程”优先级=5 tid=0x00B8EF28 nid=0x5f8可运行
“VM定期任务线程”优先级=10 tid=0x00CF4CF8 nid=0x648等待状态
“挂起检查程序线程”优先级=10 tid=0x00CF5760 nid=0x64c可运行

为线程堆栈可用的内存创建的线程太多。您可以减少创建的线程数,或从(慷慨的)默认值减少其默认堆栈大小<代码>-XX:ThreadStackSize=128将使其为128KB。当然,堆栈太少,如果您有一个特别深的方法调用,您可能会遇到
StackOverflowError
(呵呵)


由于您必须生成大量线程(数千个)才能使用默认堆栈大小来实现这一点,我的直觉认为您最好的解决方案是#1。你的应用程序中不需要数千个线程

此错误消息通常表示系统已耗尽启动线程所需的资源。通常这是堆栈的内存


Java1.4.1于2002年9月发布。可能您的系统需要升级(可能是使用的硬件或软件版本)

java.lang.OutOfMemoryError可能是由于应用程序的可用内存造成的,也可能是由于应用程序的内存泄漏造成的。检查相关线程

JVM分配每个线程内存空间,称为线程堆栈。默认值取决于操作系统和JVM。您可以尝试通过设置-Xss选项来分配分配给线程的内存,也可以尝试减少分配给堆内存的空间-Xmx选项。查看本文了解JVM调优。

好吧,它说

java.lang.OutOfMemoryError: unable to create new native thread
看来你的记忆力不够。这可能是因为旧线程不会被杀死,所以会出现越来越多的线程,直到内存满为止


或者,您可以增加Java的内存大小。

直接原因是JVM内存不足,无法为新线程创建堆栈

根本原因更难确定:

  • 应用程序可能不必要或浪费地创建线程

  • 应用程序可能在重新部署时泄漏线程

  • 线程可能在I/O中阻塞(例如读取套接字),并且永远不会返回

  • 自定义线程池中可能存在导致线程丢失的错误

  • 新堆栈所需的内存可能已被其他东西用完;e、 g.通过堆或内存映射文件或JNI代码进行非堆分配

  • 等等

调整线程堆栈大小是一个绷带解决方案,可能在短期内奏效。但从长远来看,你需要找出问题的真正原因


您应该首先配置JVM在OOME上创建一个转储文件,并使用事后转储分析器查看是否有任何线索;e、 g.大量线程处于意外状态。

您运行了多少线程,已经使用了多少内存?stacktrace很好地说明了这一点—“OutOfMemoryError”发生这种情况时,有多少线程正在运行?根据这个线程,限制是堆栈中存在连续内存块。我同意JVM应该更新,但这不太可能解决眼前的问题。(此外,该消息意味着它肯定是堆栈内存。)
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication1;

import java.util.Scanner;

/**
 *
 * @author smart
 */
public class JavaApplication1 {


    public static void main(String[] args) {

        String cname;
        double quantity, price, dp, total, dv, finaltotal;

        Scanner S=new Scanner(System.in); 


        System.out.println("please enter clientname");

        cname=S . nextLine();
        System.out.println("please enter quantity");
        quantity=S . nextDouble();
        System.out.println("please enter price");
        price=S . nextDouble();
        System.out.println("please enter discount percentage");
        dp=S . nextDouble();

        total=S . nextDouble();
        dv=S . nextDouble();
        finaltotal=S . nextDouble();

        total= quantity+price;
        dv= price-dp;
        finaltotal=total*dv;

        System.out.println(total);

        System.out.println(dv);

        System.out.println(finaltotal);           
    }   
}