source

PHP Composer가 왜 이렇게 느려?

manysource 2022. 10. 25. 17:58

PHP Composer가 왜 이렇게 느려?

종속성이 0인 프로젝트를 초기화하기만 하면 PHP Composer가 왜 이렇게 느리죠?실행하는 명령어는 다음과 같습니다.

composer init

<composer.json 작성 절차, 0 제로 의존관계 정의>

composer install

3분간 기다립니다(과장이 아닙니다).

가 해야 할 제작하는 이다./vendor런데 왜왜 ?렇 렇? ???그건 그렇고, 왜 그 단계가 안 일어나죠?composer init

위해 할 수 ?init

는 Composer에 의해 입니다.file_get_contents()TCP 최적화, 킵얼라이브, 멀티플렉싱 등이 없습니다.

패키지를 병렬로 다운로드하기 위한 Composer 플러그인을 만들었습니다.https://packagist.org/packages/hirak/prestissimo

$ composer 글로벌에는 hirak/hircissimo가 필요합니다.

한번 써 보세요. ★★★★★★★★★★★★★★★★★★★★★★★★」composer install열 살

  1. 최신 버전의 Composer가 있는지 확인합니다.
  2. 를 추가하여 예: -vvv는 -vvv입니다).composer global require "squizlabs/php_codesniffer=*" -vvv
  3. Composer의 속도가 느린 곳을 알 수 있다면, 예를 들어 패키지를 다운로드 할 때 5분 동안 정지되어 있었습니다..50 Mbit/s 20 kB 。는 HTTPS가하고 있었기 설정을 「」 「HTTP」 「HTTP」 「Packagist」 「Packagist」라고 문제가 되었습니다. 구성을 다음과 같이 변경하면 문제가 해결되었습니다.composer config --global repo.packagist composer https://packagist.org

또한 Xdebug를 비활성화합니다.Xdebug로 인해 다음과 같은 간단한 명령을 실행해도 Composer가 몇 분 정도 걸릴 수 있습니다.composer --version.

나도 마찬가지야.자세한 내용은 "composer install --profile -vvv"를 참조하십시오.제 경우 JSON 파일을 몇 개 다운로드하는 데 시간이 오래 걸립니다.서버에 캐시되지만 Composer 업데이트/설치 호출 시마다 다운로드됩니다.

30분 후...

퍼포먼스 problem@packagist.org 같습니다.이제 Composer 설치가 2초 안에 실행됩니다.다운로드된 JSON 파일은 올바르게 캐시됩니다.

이 문제에 부딪혔는데 Xdebug가 컴퓨터에 설치되어 있지 않기 때문에 난감했습니다.IPv6 어드레싱 모드의 장해가 원인으로 판명되었습니다.그래서 나는 테스트를 하기 위해 달렸다.

curl --ipv4 'https://packagist.org/packages.json'
curl --ipv6 'https://packagist.org/packages.json'

IPv4는 통과했지만 IPv6은 실패했습니다.최종적으로는, 네트워크 스택이 서포트되고 있지 않은 이유를 조사할 필요가 있습니다만, 제 경우는, 그 문제를 해결할 수 있을 때까지 IPv4 트래픽에 우선권을 부여하기로 했습니다.CentOS에서 /etc/gai.conf 파일을 작성/변경하여 다음 파일을 삽입합니다.

label       ::1/128        0
label       ::/0           1
label       2002::/16      2
label       ::/96          3
label       ::ffff:0:0/96  4
precedence  ::1/128        50
precedence  ::/0           40
precedence  2002::/16      30
precedence  ::/96          20
precedence  ::ffff:0:0/96  100

Ubuntu 에서는, 그 파일을 편집해, 행의 코멘트를 해제할 수도 있습니다.

precedence ::ffff:0:0/96  100

소스 온 랙스페이스 커뮤니티 허브

Ubuntu Xenial 16.04 VPS에서는 다음을 수행해야 합니다.

sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf"
composer global require hirak/prestissimo

IPv4 를 IPv6 보다 우선하는 것으로 설정합니다.

https://serverfault.com/questions/93717/setting-ipv4-as-preferred-protocol-over-ipv6

편집: 결론: 여기에 나열된 솔루션이 없거나 일반적으로 방탄인 것 같습니다.최종적으로 도움이 되는 것은 보통 컴포저를 증분적으로 사용하는 것입니다.한 번에 1개의 패키지만 요구하거나 삭제할 수 있습니다.composer require,composer remove specific" configurationsnf.json의 갱신을 위해 할 수 .

내 경험을 여기서부터의 답변과 문제의 링크에서 얻은 답변으로 묶는다.

지금까지 이 질문에서 언급한 모든 솔루션을 사용해 보았습니다.그러나 다른 하나의 도서관을 설치하는 것은 매우 빨랐지만, 저는 여전히 도움이 되지 않았습니다.그래서 저는 병목의 원인이 될 수 있는 도서관을 하나씩 조사했습니다.

1) 네, 그리고 코드셉션으로 찾았습니다."codeception/codeception": "2.4.0",

다른 도서관들과 함께 운영하는 것은 때때로 거의 12분 동안 실행되는 것처럼 보였지만, 그것은 거의 200초가 걸렸다.게다가 20초 후에 0.35s를 실행하는 등의 동작을 하면, 컴포저는 리얼 타임에 반영되지 않는 것 같습니다.

[374.9MiB/173.14s]     39/45:   https://codeload.github.com/sebastianbergmann/php-text-template/legacy.zip/31f8b717e51d9a2afca6c9f046f5d69fc27c8686
[374.9MiB/173.16s]     40/45:   https://codeload.github.com/sebastianbergmann/diff/legacy.zip/720fcc7e9b5cf384ea68d9d930d480907a0c1a29
[374.9MiB/173.17s]     41/45:   https://codeload.github.com/sebastianbergmann/exporter/legacy.zip/68609e1261d215ea5b21b7987539cbfbe156ec3e
[374.9MiB/173.19s]     42/45:   https://codeload.github.com/sebastianbergmann/phpunit-mock-objects/legacy.zip/f9756fd4f43f014cb2dca98deeaaa8ce5500a36e
[374.9MiB/173.20s]     43/45:   https://codeload.github.com/sebastianbergmann/recursion-context/legacy.zip/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8
[374.9MiB/173.23s]     44/45:   https://codeload.github.com/sebastianbergmann/php-code-coverage/legacy.zip/4cab20a326d14de7575a8e235c70d879b569a57a
[374.9MiB/173.24s]     45/45:   https://codeload.github.com/doctrine/instantiator/legacy.zip/ae466f726242e637cebdd526a7d991b9433bacf1
[374.9MiB/173.24s]     Finished: success: 45, skipped: 0, failure: 0, total: 45
[374.8MiB/173.25s] Analyzed 6622 packages to resolve dependencies
[374.8MiB/173.25s] Analyzed 435842 rules to resolve dependencies
[374.8MiB/173.25s] Package operations: 54 installs, 0 updates, 0 removals
[374.8MiB/173.26s] Installs: sebastian/recursion-context:3.0.0, sebastian/exporter:3.1.2, doctrine/instantiator:1.3.0, phpunit/php-text-template:1.2.1, phpunit/phpunit-mock-objects:6.1.2, codeception/stub:1.0.4, sebastian/diff:3.0.2, sebastian/comparator:3.0.2, theseer/tokenizer:1.1.3, sebastian/version:2.0.1, sebastian/environment:3.1.0, sebastian/code-unit-reverse-lookup:1.0.1, phpunit/php-token-stream:3.1.1, phpunit/php-file-iterator:1.4.5, phpunit/php-code-coverage:6.0.5, sebastian/object-reflector:1.1.1, sebastian/object-enumerator:3.0.3, sebastian/global-state:2.0.0, phpunit/php-timer:2.1.2, symfony/polyfill-ctype:v1.17.0, webmozart/assert:1.8.0, phpdocumentor/reflection-common:2.1.0, phpdocumentor/type-resolver:1.1.0, phpdocumentor/reflection-docblock:5.1.0, phpspec/prophecy:v1.10.3, myclabs/deep-copy:1.9.5, sebastian/resource-operations:1.0.0, phar-io/version:1.0.1, phar-io/manifest:1.0.1, phpunit/phpunit:7.1.5, codeception/phpunit-wrapper:7.6.1, symfony/yaml:v4.4.8, behat/gherkin:v4.6.2, symfony/polyfill-mbstring:v1.17.0, symfony/dom-crawler:v4.4.8, symfony/css-selector:v4.4.8, symfony/browser-kit:v4.4.8, symfony/event-dispatcher-contracts:v1.1.7, psr/container:1.0.0, symfony/event-dispatcher:v4.4.8, symfony/service-contracts:v2.0.1, symfony/polyfill-php73:v1.17.0, symfony/console:v4.4.8, symfony/finder:v4.4.8, ralouphie/getallheaders:3.0.3, psr/http-message:1.0.1, guzzlehttp/psr7:1.6.1, guzzlehttp/promises:v1.3.1, symfony/polyfill-php72:v1.17.0, symfony/polyfill-intl-idn:v1.17.0, guzzlehttp/guzzle:6.5.3, symfony/process:v4.4.8, facebook/webdriver:1.7.1, codeception/codeception:2.4.0
[374.8MiB/173.28s]   - Installing sebastian/recursion-context (3.0.0): [374.9MiB/173.28s] Loading from cache[374.9MiB/173.28s]
[374.9MiB/173.28s]  Extracting archive[374.9MiB/173.51s]   - Installing sebastian/exporter (3.1.2): [374.9MiB/173.52s] Loading from cache[374.9MiB/173.52s]
[374.9MiB/173.52s]  Extracting archive[374.9MiB/173.75s]   - Installing doctrine/instantiator (1.3.0): [374.9MiB/173.76s] Loading from cache[374.9MiB/173.76s]
[374.9MiB/173.76s]  Extracting archive[374.9MiB/174.00s]   - Installing phpunit/php-text-template (1.2.1): [374.9MiB/174.00s] Loading from cache[374.9MiB/174.00s]
[374.9MiB/174.00s]  Extracting archive[374.9MiB/174.23s]   - Installing phpunit/phpunit-mock-objects (6.1.2): [374.9MiB/174.23s] Loading from cache[374.9MiB/174.23s]
[374.9MiB/174.23s]  Extracting archive[374.9MiB/174.55s]   - Installing codeception/stub (1.0.4): [374.9MiB/174.56s] Loading from cache[374.9MiB/174.56s]
[374.9MiB/174.56s]  Extracting archive[374.9MiB/174.80s]   - Installing sebastian/diff (3.0.2): [374.9MiB/174.80s] Loading from cache[374.9MiB/174.80s]
[374.9MiB/174.80s]  Extracting archive[374.9MiB/175.07s]   - Installing sebastian/comparator (3.0.2): [374.9MiB/175.07s] Loading from cache[374.9MiB/175.07s]
[374.9MiB/175.07s]  Extracting archive[374.9MiB/175.33s]   - Installing theseer/tokenizer (1.1.3): [374.9MiB/175.33s] Loading from cache[374.9MiB/175.33s]

실행 전

 Problem 1
    - Installation request for codeception/codeception 2.4.0 -> satisfiable by codeception/codeception[2.4.0].
    - Conclusion: remove symfony/finder v5.0.8
    - Conclusion: don't install symfony/finder v5.0.8
    - codeception/codeception 2.4.0 requires symfony/finder >=2.7 <5.0 -> satisfiable by symfony/finder[v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.15, v2.7.16, v2.7.17, v2.7.18, v2.7.19, v2.7.2, v2.7.20, v2.7.21, v2.7.22, v2.7.23, v2.7.24, v2.7.25, v2.7.26, v2.7.27, v2.7.28, v2.7.29, v2.7.3, v2.7.30, v2.7.31, v2.7.32, v2.7.33, v2.7.34, v2.7.35, v2.7.36, v2.7.37, v2.7.38, v2.7.39, v2.7.4, v2.7.40, v2.7.41, v2.7.42, v2.7.43, v2.7.44, v2.7.45, v2.7.46, v2.7.47, v2.7.48, v2.7.49, v2.7.5, v2.7.50, v2.7.51, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.10, v2.8.11, v2.8.12, v2.8.13, v2.8.14, v2.8.15, v2.8.16, v2.8.17, v2.8.18, v2.8.19, v2.8.2, v2.8.20, v2.8.21, v2.8.22, v2.8.23, v2.8.24, v2.8.25, v2.8.26, v2.8.27, v2.8.28, v2.8.29, v2.8.3, v2.8.30, v2.8.31, v2.8.32, v2.8.33, v2.8.34, v2.8.35, v2.8.36, v2.8.37, v2.8.38, v2.8.39, v2.8.4, v2.8.40, v2.8.41, v2.8.42, v2.8.43, v2.8.44, v2.8.45, v2.8.46, v2.8.47, v2.8.48, v2.8.49, v2.8.5, v2.8.50, v2.8.52, v2.8.6, v2.8.7, v2.8.8, v2.8.9, v3.0.0, v3.0.1, v3.0.2, v3.0.3, v3.0.4, v3.0.5, v3.0.6, v3.0.7, v3.0.8, v3.0.9, v3.1.0, v3.1.1, v3.1.10, v3.1.2, v3.1.3, v3.1.4, v3.1.5, v3.1.6, v3.1.7, v3.1.8, v3.1.9, v3.2.0, v3.2.1, v3.2.10, v3.2.11, v3.2.12, v3.2.13, v3.2.14, v3.2.2, v3.2.3, v3.2.4, v3.2.5, v3.2.6, v3.2.7, v3.2.8, v3.2.9, v3.3.0, v3.3.1, v3.3.10, v3.3.11, v3.3.12, v3.3.13, v3.3.14, v3.3.15, v3.3.16, v3.3.17, v3.3.18, v3.3.2, v3.3.3, v3.3.4, v3.3.5, v3.3.6, v3.3.7, v3.3.8, v3.3.9, v3.4.0, v3.4.1, v3.4.10, v3.4.11, v3.4.12, v3.4.13, v3.4.14, v3.4.15, v3.4.16, v3.4.17, v3.4.18, v3.4.19, v3.4.2, v3.4.20, v3.4.21, v3.4.22, v3.4.23, v3.4.24, v3.4.25, v3.4.26, v3.4.27, v3.4.28, v3.4.29, v3.4.3, v3.4.30, v3.4.31, v3.4.32, v3.4.33, v3.4.34, v3.4.35, v3.4.36, v3.4.37, v3.4.38, v3.4.39, v3.4.4, v3.4.40, v3.4.5, v3.4.6, v3.4.7, v3.4.8, v3.4.9, v4.0.0, v4.0.1, v4.0.10, v4.0.11, v4.0.12, v4.0.13, v4.0.14, v4.0.15, v4.0.2, v4.0.3, v4.0.4, v4.0.5, v4.0.6, v4.0.7, v4.0.8, v4.0.9, v4.1.0, v4.1.1, v4.1.10, v4.1.11, v4.1.12, v4.1.2, v4.1.3, v4.1.4, v4.1.5, v4.1.6, v4.1.7, v4.1.8, v4.1.9, v4.2.0, v4.2.1, v4.2.10, v4.2.11, v4.2.12, v4.2.2, v4.2.3, v4.2.4, v4.2.5, v4.2.6, v4.2.7, v4.2.8, v4.2.9, v4.3.0, v4.3.1, v4.3.10, v4.3.11, v4.3.2, v4.3.3, v4.3.4, v4.3.5, v4.3.6, v4.3.7, v4.3.8, v4.3.9, v4.4.0, v4.4.1, v4.4.2, v4.4.3, v4.4.4, v4.4.5, v4.4.6, v4.4.7, v4.4.8].
    - Can only install one of: symfony/finder[v2.7.0, v5.0.8].
    - Can only install one of: symfony/finder[v2.7.1, v5.0.8].
    - Can only install one of: symfony/finder[v2.7.10, v5.0.8].
    - Can only install one of: symfony/finder[v2.7.11, v5.0.8].

2) YES Btw, 말씀드린 바와 같이 prestissimo는 이미 적용되어 있어서 도움이 되는 것 같았습니다.코드 수신 없이 인터넷을 사용할 수 있는 또 다른 초고속 컴퓨터에서는 설치 시간이 5배인 518초 정도 걸렸는데, 여기에는 prestissimo나 다른 조언이 있어서인지 110초가 걸렸습니다.

composer global require hirak/prestissimo

3) YES Windows가 느리고 Windows에서 Linux로 가상화된 폴더도 느립니다.Linux 내의 공유 폴더 외부에서 실행하면 속도가 약 2배 빨라지는 것 같습니다.적법한 캐쉬일 수도 있지만요

4) 아니요

    "process-timeout": 1800,

git checkout과 같은 단일 프로세스별로 이루어지며, 이미 상당히 큰 규모였기 때문에 10s로 설정조차 전혀 도움이 되지 않는 것 같습니다.일부 서비스가 완전히 중단되었을 때만 도움이 될 수 있습니다.

5) 벤더 폴더를 삭제하거나 빈 상태로 설치하는 것이 벤더 파일 및 기타 패키지에 추가하는 것보다 훨씬 빠른 것 같습니다(약 1분 이상).

6) Yii2-starter-kit의 xdebug를 사용해도 Debian10 php-fpm보다 xdebug가 없는 Ubuntu18 apache2의 속도가 2배 정도 느린 것 같습니다.cat /etc/*-release 를 사용합니다.

NO7) 니니 7 php -ddefault_socket_timeout=1 /usr/local/bin/composer --verbose --profile install--prefer-dist 플래그나 IP v6 v4 프로토콜이 언급되어 있음에도 불구하고 여기서 언급한 것은 composer 종속성의 느린 업데이트에 도움이 되지 않는 것 같습니다. 그러나 적절한 캐시일 수도 있습니다.

8) ZIP 설치는 도움이 되지 않는 것 같습니다.PHP 설치는 zip이 프리 인스톨 되어 있습니다.Linux 패키지로 인스톨 될 때까지 거기에 존재하지 않는 것을 불평하고 있습니다만, 1개의 시뮬레이션으로 처리를 650초에서 750초로 100초 늦춰 버렸습니다.같은 환경 조건입니다. As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension 캐시리스 조건에서의 https://stackoverflow.com/a/51208804/3419535 테스트--no-cache

9) YES remove"minimum-stability ": "dev",

10) 예 사용 선호 거리composer require robmorgan/phinx:@dev --prefer-dist -vvv --profile(예를 들어 install 명령어를 통한 완전한 설치가 아닌 위에서 설명한 부분적인 require 명령어를 사용하는 것이 가장 중요한 속도 향상 중 하나이며, 이전 포인트와 마찬가지로 @dev-가 필요합니다.minimum-stability: dev모든 의존성에 일반적으로 적용되지 않는 경우 건당 사용(의존성)에 해가 없는 것으로 보인다.

제 경우, 제가 실행하던 작곡가 버전이 과거로 거슬러 올라갑니다.컴포넌트 버전을 업데이트한 후 문제가 해결되었습니다.

실행 중인 Composer 버전을 업데이트하려면

composer self-update

작곡가 패키지가 필요하시면 끝입니다.

composer require "<package-name>"

위의 답변 중 하나라도 작동하지 않으면 방화벽이 포트 9418에서 TCP_OUT을 허용하는지 확인합니다.

내 방화벽 보안이 너무 강했어.이로 인해 Composer가 너무 오래 걸려서 포트가 차단되었다는 표시나 타임아웃을 받은 적이 없습니다.

나는 바이러스 대책 때문에 json 파일을 다운로드 할 때 느렸다.일부 안티바이러스는 모든 웹 트래픽을 검사하여 json 파일 분석이 느릴 수 있습니다.컴포저를 실행하는 동안 AV를 사용하지 않도록 설정하십시오.

순서 1

$ composer self-update

순서 2

$ composer clear-cache

순서 3

$ composer update

다른 가능한 해결책을 찾았습니다. 문제는 고객님의 환경에서 확장 기능이 부족하다는 것입니다.그러니 다음 단계를 따르세요.

  1. 먼저, 에 액세스 할 수 있는지 여부를 확인합니다.

    packagist.org 를 참조해 주세요.서버로부터 회신이 돌아왔을 경우는, 다음의 순서를 실행할 수 있습니다.

  2. cUrl 확장자가 다음에 존재하는지 확인합니다.composer diagnose저는 이 결과를 얻었는데, 그 결과는 제가 가지고 있지 않다는 것입니다.cUrlextension : 다운로드 시 퍼포먼스가 저하될 수 있습니다.

  3. 고객님의 환경의 php 버전에 따라 curl을 설치하고, 저는 8이었습니다.sudo apt-get install php8.0-curl나를 위해 일했다

  4. cUrl 을 인스톨 한 후, 다시 인스톨 되었는지 확인해 주세요.composer diagnosecUrl 버전을 설명하는 결과를 받았습니다.enter image description here

  5. 패키지의 인스톨이 늦어지는 작곡가의 문제가 해결되었습니다.

2개의 다른 프로젝트에서 2개의 PHPSTorm 창을 열어 두었는데, 첫 번째 프로젝트는 빠르게 실행되었고 두 번째 프로젝트는 작곡가 설치 속도가 느렸습니다.또한 작곡가 설치 시 하루 종일 켜져 있었습니다.Powershell 창에서도 같은 문제가 발생.내가 닫았을 때 첫 번째 프로젝트 작곡가의 시작은 두 번째 프로젝트에서 잘 진행되었다.

자세한 내용은 Composer Update/Install을 실행하는 것이 가장 좋습니다.composer {install/update} -vvv.-h 플래그를 사용하면 나중에 도움이 될 수 있습니다.

composer.lock 파일을 삭제한 후 다음 명령을 실행한 경우composer install종속성을 다운로드하는 것이 너무 느려집니다.이 경우는, 을 사용해 주세요.composer update명령어를 사용하면 자신이나 다른 사람에게 도움이 될 수 있습니다.

언급URL : https://stackoverflow.com/questions/28436237/why-is-php-composer-so-slow