Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用linux redhat的java上出现内存不足异常_Java_Linux_Out Of Memory_Redhat - Fatal编程技术网

使用linux redhat的java上出现内存不足异常

使用linux redhat的java上出现内存不足异常,java,linux,out-of-memory,redhat,Java,Linux,Out Of Memory,Redhat,我在linux/redhat上面临内存不足的问题,同样的程序也可以在我的windows机器上运行 我的linux机器配置为15Gb RAM import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java

我在linux/redhat上面临内存不足的问题,同样的程序也可以在我的windows机器上运行

我的linux机器配置为15Gb RAM

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.sql.ResultSet;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

/**
 *
 * @author ndoshi
 */
public class Dwnld {

    BufferedImage bi8 = null, bi16 = null;
    ImageIcon ii = null;
    ResultSet rs, rsDwnld;
    String OG = "ogImage\\";
    String CROP8 = "Crop8\\";
    String CROP16 = "Crop16\\";
    String TIME = "", ErrorLog = "", ErrorLogPro = "";
    int hashInc8 = 0;
    int hashInc16 = 0;
    int totalround = 0;
    int countProcess = 0;
    boolean download_new = false;
    private int row = 0;
    int Dwnld = 0, NotDwnld = 0;
    final String OP_Log = "Log", OP_Error = "ErrorLog", OP_ErrorPro = "ErrorLogProcess";

    int r, g, b, k, ih, j;
    int sr = 0, sg = 0, sb = 0, sk = 0;
    int rg, gg, bg, kg;
    String s = "", s1 = "", hash16, hash8;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new Dwnld();
    }

    public Dwnld(){
    try {
            BufferedImage image = null;
            InputStream is = null;
            OutputStream os = null;
            URL url = new URL("https://rukminim1.flixcart.com/image/312/312/t-shirt/u/g/k/33solidblackmelangeblack-sayitloud-m-original-imaehfytzzzazfyf.jpeg?q=70");
            is = url.openStream();
            os = new FileOutputStream(OG + "1.jpg");
            byte[] b = new byte[2048];
            int length;
            while ((length = is.read(b)) != -1) {
                os.write(b, 0, length);
            }
            image = ImageIO.read(new File(OG + "1.jpg"));
            is.close();
            os.close();
            System.out.println("Hash 16 = "+hash16);
            System.out.println("Hash 8 = "+hash8);
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

    }

}
我正在运行sam eby,使用XMS和XMX as增加内存

java -Xms2048m -Xmx6096m Dwnld 
获取时出错:

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Thread.java:714)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1056)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1301)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
        at java.net.URL.openStream(URL.java:1037)
        at Dwnld.<init>(Dwnld.java:53)
        at Dwnld.main(Dwnld.java:43)
线程“main”java.lang.OutOfMemoryError中出现异常:无法创建新的本机线程 位于java.lang.Thread.start0(本机方法) 在java.lang.Thread.start(Thread.java:714)处 位于sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1056) 位于sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332) 位于sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359) 位于sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343) 位于sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) 位于sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1301) 位于sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 在java.net.URL.openStream(URL.java:1037) 在Dwnld。(Dwnld.java:53) 位于Dwnld.main(Dwnld.java:43)
以获取线程转储并尝试分析它开始

或者,还有许多其他方法可以作为解决方法:

  • /proc/sys/kernel/threads max
    文件提供了系统范围内的线程数量限制。根用户可以更改该值,如果他们希望:

    $echo 100000>/proc/sys/kernel/threads max

  • 在linux中,线程只是具有共享地址空间的进程,因此您应该检查每个用户的进程数

  • 检查线程PID限制,因为存在基于kernel.PID\u max limit参数值的最大PID限制。 使用此
    命令$sysctl-a | grep kernel.pid_max
    获得最大允许pid
  • 如果无法修改操作系统设置,则会减小堆栈大小。类似于
    JAVA_OPTS=“-Xss256k”

  • 您应该在finally子句中关闭流(或使用try with resources),这可能会有所帮助-