laravel / framework

The Laravel Framework.
https://laravel.com
MIT License
32.23k stars 10.92k forks source link

HTTP client open streams causing "too many open files" error #38641

Closed craigballinger closed 3 years ago

craigballinger commented 3 years ago

Description:

Laravel 8.37 introduced an issue where standard HTTP GET requests using the Laravel HTTP client would leave the request stream open until the script completed. Given sufficient requests, the script will eventually fail with a "too many open files" error.

Steps To Reproduce:

Run multiple HTTP::get() requests.

for($i=0; $i<10; $i++){
    $response = Http::get('https://google.com');
    sleep(5);
}

While the script is running, use lsof on the command line to watch the open files count grow.

lsof -u forge | grep "ESTABLISHED" (tested on a forge server under the forge user)

php      56418 forge    7u     IPv4             194346      0t0        TCP http-debug:50600->lga25s74-in-f14.1e100.net:https (ESTABLISHED)
php      56418 forge    8u     IPv4             194359      0t0        TCP http-debug:45022->lga25s71-in-f4.1e100.net:https (ESTABLISHED)
php      56418 forge   11u     IPv4             194838      0t0        TCP http-debug:50604->lga25s74-in-f14.1e100.net:https (ESTABLISHED)
php      56418 forge   12u     IPv4             194849      0t0        TCP http-debug:45026->lga25s71-in-f4.1e100.net:https (ESTABLISHED)
php      56418 forge   15u     IPv4             195291      0t0        TCP http-debug:50608->lga25s74-in-f14.1e100.net:https (ESTABLISHED)
php      56418 forge   16u     IPv4             195302      0t0        TCP http-debug:45030->lga25s71-in-f4.1e100.net:https (ESTABLISHED)
php      56418 forge   19u     IPv4             195463      0t0        TCP http-debug:50612->lga25s74-in-f14.1e100.net:https (ESTABLISHED)
php      56418 forge   20u     IPv4             195474      0t0        TCP http-debug:45034->lga25s71-in-f4.1e100.net:https (ESTABLISHED)
php      56418 forge   23u     IPv4             195488      0t0        TCP http-debug:50616->lga25s74-in-f14.1e100.net:https (ESTABLISHED)
php      56418 forge   24u     IPv4             195499      0t0        TCP http-debug:45038->lga25s71-in-f4.1e100.net:https (ESTABLISHED)
php      56418 forge   27u     IPv4             195514      0t0        TCP http-debug:50620->lga25s74-in-f14.1e100.net:https (ESTABLISHED)
php      56418 forge   28u     IPv4             195525      0t0        TCP http-debug:45042->lga25s71-in-f4.1e100.net:https (ESTABLISHED)
php      56418 forge   31u     IPv4             195539      0t0        TCP http-debug:50624->lga25s74-in-f14.1e100.net:https (ESTABLISHED)
php      56418 forge   32u     IPv4             195550      0t0        TCP http-debug:45046->lga25s71-in-f4.1e100.net:https (ESTABLISHED)
php      56418 forge   35u     IPv4             195563      0t0        TCP http-debug:50628->lga25s74-in-f14.1e100.net:https (ESTABLISHED)
php      56418 forge   36u     IPv4             195574      0t0        TCP http-debug:45050->lga25s71-in-f4.1e100.net:https (ESTABLISHED)
php      56418 forge   39u     IPv4             195588      0t0        TCP http-debug:50632->lga25s74-in-f14.1e100.net:https (ESTABLISHED)
php      56418 forge   40u     IPv4             195599      0t0        TCP http-debug:45054->lga25s71-in-f4.1e100.net:https (ESTABLISHED)
php      56418 forge   43u     IPv4             195612      0t0        TCP http-debug:50636->lga25s74-in-f14.1e100.net:https (ESTABLISHED)
php      56418 forge   44u     IPv4             195623      0t0        TCP http-debug:45058->lga25s71-in-f4.1e100.net:https (ESTABLISHED)
driesvints commented 3 years ago

Heya thanks for reporting. Let's see how your PR goes.