1

在 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;
}

如果有人能指出正确的方向是什么可以创建这些套接字,那将不胜感激。

4

0 回答 0