在 Debian 上运行我的一个 java 程序大约 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;
}
如果有人能指出正确的方向是什么可以创建这些套接字,那将不胜感激。