使用linux-redhat的java上的内存不足
发布时间:2020-12-14 01:40:54 所属栏目:Linux 来源:网络整理
导读:我在 linux / redhat上遇到Outof memory问题,同样的程序在我的windows机器上工作. 我的linux机器配置是15Gb RAM. import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.Out
我在
linux / redhat上遇到Outof memory问题,同样的程序在我的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,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为 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) 解决方法
首先获取线程转储并尝试分析它.
或者,还有许多其他方法可以作为解决方法: > / proc / sys / kernel / threads-max文件提供了线程数的系统范围限制. root用户可以更改该值,如果他们希望: $echo 100000>的/ proc / SYS /内核/线程-MAX>在Linux的情况下,线程只是具有共享地址空间的进程,因此您应该检查每个用户的进程数.>检查线程PID限制,因为根据kernel.pid_max limit参数的值有最大PID限制.使用此命令$sysctl -a | grep kernel.pid_max获取最大允许PID.>如果您无法修改操作系统设置,则会减小堆栈大小.像JAVA_OPTS =“ – Xss256k” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |