최근에 나는 apt-get 업데이트가 다른 서버보다 일부 서버에서 훨씬 느리게 실행되는 것을 느꼈습니다.
xxx@xxx:/usr/lib/php5/20121212$ sudo apt-get update
Ign http://downloads-distro.mongodb.org dist InRelease
일부 서버가 실행 apt-get update
되고 0.5초도 안 되어 위의 두 번째 줄이 표시됩니다. 다른 서버에서는 두 번째 줄을 표시하는 데 약 5초가 걸립니다.
나는 sudo strace apt-get update
느린 서버가 몇 초 동안 벨로우즈에서 멈추는 것을 발견했습니다.
open("/etc/apt/sources.list", O_RDONLY) = 4
read(4, "# \n\n# deb cdrom:[Ubuntu-Server 1"..., 8191) = 3488
pipe([5, 6]) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f0ab30f3a50) = 30800
close(6) = 0
fcntl(5, F_GETFL) = 0 (flags O_RDONLY)
fstat(5, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0ab2f68000
lseek(5, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
read(5, "i386\n <----------------- here
몇 초 후에 다음과 같이 계속됩니다.
, 4096) = 5
read(5, "", 4096) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=30800, si_status=0, si_utime=307, si_stime=167} ---
close(5) = 0
munmap(0x7f0ab2f68000, 4096)
출력은 모든 서버에서 거의 동일합니다.
문제를 해결하는 방법?
답변1
드디어 내 친구가 문제를 알아냈습니다.
이는 시스템 사용자를 위해 매우 크게 설정한 열린 파일 제한으로 인해 발생했습니다. 우분투의 버그입니다.
우리는 훨씬 더 작은 열린 파일 제한을 설정하여 apt-get 업데이트가 빨라졌습니다.