Debian で Java プログラムの 1 つを約 30 時間以上実行した後、「java.net.socketexception: 開いているファイルが多すぎます」というメッセージが表示されます。
以下のコマンドを使用して、開いているソケットを見つけました
lsof -P -n -p 4910
数時間実行した後、以下のような多くの開いているソケットが表示されます
/tmp/imageio2002515050983683549.tmp
/tmp/imageio996828308430904152.tmp
/tmp/imageio5844657308570033292.tmp
上記のソケットは何に関連していますか? 私のプログラムには、画像にテキストを書き込むメソッドがあり、これがコードです。このメソッドは、それらのソケットを作成し、それらを閉じていませんか?
public String writeTextOnImage(String imagePath, String text) throws Exception
{
int x = 30;
int y = 300;
String editedImageName = Tools.GenerateRandomString() + ".jpg";
BufferedImage img = ImageIO.read(new File(imagePath));
int width = img.getWidth();
int height = img.getHeight();
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.SCALE_SMOOTH);
Graphics2D g2d = bufferedImage.createGraphics();
// draw graphics
g2d.drawImage(img, 0, 0, null);
g2d.setPaint(Color.RED);
g2d.setFont(new Font("Arial", Font.BOLD, 30));
g2d.drawString(text , x, y);
g2d.dispose();
File file = new File(editedImageName);
ImageIO.write(bufferedImage, "jpg", file);
return editedImageName;
}
これらのソケットを作成している可能性があるものとして誰かが正しい方向を指し示すことができれば、それは高く評価されます.