我正在寻找最佳的优化方式,我们可以使用它将大型日志文件从本地路径传输到NFS路径。
这里的日志文件会随着时间的变化而动态变化。
我目前使用的是一个java实用程序,它将从本地路径读取文件,并将其传输到NFS路径。但这似乎很耗费时间。
我们不能使用复制命令,因为日志文件被附加了更多的新日志。所以这行不通。
我要找的是…除了使用java实用程序之外,还有其他方法可以将日志文件的详细信息从本地路径传输到NFS路径吗?
提前感谢!!
如果您的网络速度高于日志增长速度,您可以直接使用cp src dst
。
如果日志增长太快,你不能推送那么多数据,但你只想要当前快照,我看到三个选项:
- 像现在一样,将整个文件读入内存,然后复制到目标。使用大的日志文件可能会导致非常大的内存占用。需要特殊的工具或 tmpfs.
- 创建文件的本地副本,然后将该副本移动到目标。很明显的。需要有足够的空闲空间,增加存储设备的压力。如果临时文件在tmpfs中,这与第一种方法完全相同,但不需要特殊工具(仍然需要内存和足够大的tmpfs)。
- 取当前文件大小并只复制该数量的数据,忽略复制过程中附加的任何内容。
例如:
dd if=src.file of=/remote/dst.file bs=1 count=`stat -c '%s' src.file`
stat
取当前文件大小,然后指示dd
只复制该字节数。
由于bs
较低,为了获得更好的性能,您可能希望将其与另一个dd
结合使用:
dd status=none bs=1 count=`stat -c '%s' src.file` | dd bs=1M of=/remote/dst.file