1. 苏葳的备忘录首页
  2. 操作系统

UnixWare下ftp传输文件超1G时出错的解决

sco ulimit unix两台UnixWare用ftp传文件,文件大小1.3G左右,但传至1G时断掉,ftp错误提示:452 Error writing file: No child processes.看已经收到的文件,长度是1073741823字节,转换成2进制是:111111111111111111111111111111看起来很象是达到某种限制了。ulimit是Unix类操作系统用来限制进程对资源的使用情况的。因为作为多用户系统,系统不能允许每个用户进程滥用资源。用ulimit -a看看有无限制:

time(seconds) unlimited
file(blocks) 2097151
data(kbytes) unlimited
stack(kbytes) 16384
coredump(blocks) 32768
nofiles(descriptors) 2048
memory(kbytes) unlimited

用2097151*512=1073741312。若再加1个512块,则超出上面文件长度1个字节,换言之,上面实际文件长度正好在2097151块限度之内。可见,很可能是这个限制导致问题。

man ulimit显示:

-f
          The number of 512-byte blocks on files that can be written by
          the current process and its child processes (files of any size
          may be read). On file systems (such as vxfs file systems) that
          support large files, setting this limit to unlimited represents
          the largest file size supported on the file system. See
          ``Notices'', below.

注意里面的child process。那么去掉这个限制,需要传的文件是1.3个G,应该未超出文件系统限制(2G)。执行ulimit -f unlimited。再查看,file的限制已经是unlimited了。再从另一台机子上往这台机子上put文件,还是报一样的错误。

查看ulimit的man,原来修改只对本次shell登录有效。那么就是说对于另一台机子来说,本机的系统其实还是limit到了1个G。所以出错也正常。那我取过来呢?从本机ftp到另一台机子上,get那个文件,果然,成功了,收到了完整的1.3G文件。

现在退出本机登录的用户,再重新登录,果然,ulimit -a查看的文件大小限制,又变回了2097151块。想必有地方配置它为系统参数使其永久生效,急于回家暂不研究,将ulimit -f unlimited写进.profile文件里走人。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/481.html

发表评论

邮箱地址不会被公开。 必填项已用*标注