我的线程落后于计划,线程转储显示它们都被阻塞在阻塞 IO 将日志输出写入硬盘。我的快速解决方法只是减少日志记录,这对于我的 QA 要求来说很容易做到。当然,这不是垂直可扩展的,这很快就会成为一个问题。
我想过只是增加线程数,但我猜瓶颈在于文件争用,如果这是错误的做法,这可能会很糟糕。
我有很多想法,但真的不知道哪些是富有成果的。
- 我考虑过增加线程数,但我猜他们会遇到瓶颈,所以这不会做任何事情。这个对吗?如何确定?减少线程数有帮助吗?
- 如何分析要写入磁盘的正确线程数?这是写请求数、每秒写入字节数、每次写入操作字节数的函数,还有什么?
- 我可以切换较低级别的设置(文件系统、操作系统等)以减少对文件的锁定以换取乱序行吗?在我的 Java 应用程序中还是更低级别?
- 我可以分析我的系统或硬盘以确保它不会以某种方式过度工作吗?(含糊不清,但我不在我的领域)。
所以我的问题是:如何分析以确定可以安全写入公共文件的正确线程数?哪些变量决定了这一点 - 写入操作的数量、每秒写入的字节数、每个写入请求的字节数、任何操作系统或硬盘信息。
还有什么方法可以使日志文件更自由地写入?我们对所有内容都加上时间戳,所以如果它减少阻塞,我可以接受少数乱序行。