AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 949637
Accepted
Michael Rodrigues
Michael Rodrigues
Asked: 2019-01-18 16:59:35 +0800 CST2019-01-18 16:59:35 +0800 CST 2019-01-18 16:59:35 +0800 CST

监视文件服务器的临时文件锁定

  • 772

我有一个 IIS 网络服务(商业产品),它使用 UNC 将文件写入远程 Windows 文件服务器。

有时,特别是在批量写入大量小文件时,该过程会失败。事件日志显示该进程因“该进程无法访问该文件,因为它正被另一个进程使用”而失败。

当我去查看文件时,无论锁定它都不再锁定它,我可以毫无问题地写入它。

所以有些东西暂时锁定了文件。

我不能使用 Process Monitor、OpenFiles 等,因为我需要在问题随机和暂时发生时发现它。

我无法监控特定文件,因为 Web 服务每次都会写入全新的文件。但它们被写入特定的顶级文件夹和随机子文件夹。

这听起来很像 AntiVirus,但我们的 McAfee 已在所有相关机器上禁用了 OnAccess 扫描。

可以在服务器上运行一些东西来监视文件锁定失败错误/事件并在它们发生时捕获进程信息吗?

如何在写入文件时捕获哪个进程暂时锁定文件?

windows
  • 2 2 个回答
  • 1025 Views

2 个回答

  • Voted
  1. Best Answer
    Swisstone
    2019-01-27T13:45:14+08:002019-01-27T13:45:14+08:00

    我认为您应该考虑在文件服务器上使用 procmon,并使用以下设置:

    File -> Backing Files -> "Use file named:" 并选择一个有足够可用磁盘空间的路径。(通过使用备份文件,您可以避免填满服务器的虚拟内存)。

    过滤器:创建一个或多个过滤器以匹配包含文件的文件夹或根目录(通常为“路径”“开始于”路径)

    过滤器 -> 删除过滤的事件

    然后,开始捕获并查看您的过滤器是否正常工作。您可以根据事件的数量调整选项 - >“历史深度”。

    • 2
  2. Dexirian
    2019-01-26T11:08:50+08:002019-01-26T11:08:50+08:00

    编辑:我刚刚意识到这是在 Windows 上,我会将其修改为适用于 Windows 操作系统的类似选项;稍后会更新

    可能的获胜解决方案:

    从 sysinternals 下载以下工具

    https://docs.microsoft.com/en-us/sysinternals/downloads/handle

    创建一个包含以下内容的批处理文件:

    @ECHO OFF
    :loop
      cls
      handle -u >> output.txt
      timeout /t 1 > NUL
    goto loop
    

    在您放置 sysinternal 句柄的同一位置运行批处理文件,它将打印所有打开的文件并每秒列出进程,因此在进行文件传输时运行批处理文件,然后使用 CTRL+C 手动终止它。搜索日志以找到错误的进程

    可能的 UNIX 解决方案:

    在进行文件传输之前,请在故障机器上执行以下命令:

    nohup watch -n 1 lsof | grep FILENAME_HERE >> /path/to/log/log.txt &
    

    "nohup" : 使命令在后台运行,所以它会一直运行直到你手动杀死它

    “watch -n 1”:每秒运行一次这个命令

    "lsof" : 列出所有打开的文件

    "grep" : lsof 的过滤结果

    ">>" : 管道输出并附加到文件

    & :运行命令并返回到 cmd 提示符

    因此,您启动此命令,然后开始传输,如果您不确定是否可以删除 grep 部分,但这会使通过日志变得更加困难。尽管您可以使用 grep 查找失败的文件的日志并找到正在使用它的进程。如果您对此有任何不确定,请告诉我

    完成后,请记住手动终止该进程

    ps-辅助 | grep 看

    找到pid并运行

    杀死$pid

    • 0

相关问题

  • 知道任何适用于 Windows 的快速可编写脚本的 ftp 客户端吗?[关闭]

  • 如果 Windows 服务崩溃,如何自动重新启动它?

  • 无法安排任务(访问被拒绝)

  • 物理机重启时自动重启虚拟机(VMWare)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve