Używam zadania kolejki Laravel o nazwie "webhooks" za pomocą beanstalkd i supervisord na moim serwerze Ubuntu. Widzę, że praca prawidłowo działa z identyfikatorem procesu 4403:Kolejka Laravel z supervisorem otwierającym zbyt wiele plików FIFO
webhooks RUNNING pid 4403, uptime 4 days, 19:47:01
Jak widać, zadanie to działa przez 4 dni. W moich dzienników błędów, zacząłem dostrzegać następujący błąd pojawiający:
error:02001018:system library:fopen:Too many open files
Kiedy wpadłem lsof | php
, aby zobaczyć jakie pliki były otwarte, zauważyłem mnóstwo otwartych plików, które miały typ FIFO
. Oto ekspert od wyjścia:
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php 4403 root 0r FIFO 0,8 0t0 9215811 pipe
php 4403 root 1w FIFO 0,8 0t0 9215812 pipe
php 4403 root 2w FIFO 0,8 0t0 9215812 pipe
php 4403 root 3w FIFO 0,8 0t0 9215812 pipe
php 4403 root 4w FIFO 0,8 0t0 9215812 pipe
php 4403 root 8r FIFO 0,8 0t0 9215811 pipe
php 4403 root 9r FIFO 0,8 0t0 9215811 pipe
php 4403 root 10r FIFO 0,8 0t0 9215811 pipe
php 4403 root 11r FIFO 0,8 0t0 9215811 pipe
php 4403 root 12r FIFO 0,8 0t0 9215811 pipe
php 4403 root 13r FIFO 0,8 0t0 9215811 pipe
php 4403 root 14r FIFO 0,8 0t0 9215811 pipe
php 4403 root 15r FIFO 0,8 0t0 9215811 pipe
php 4403 root 16r FIFO 0,8 0t0 9215811 pipe
php 4403 root 17r FIFO 0,8 0t0 9215811 pipe
php 4403 root 18r FIFO 0,8 0t0 9215811 pipe
php 4403 root 19r FIFO 0,8 0t0 9215811 pipe
php 4403 root 20r FIFO 0,8 0t0 9215811 pipe
php 4403 root 21r FIFO 0,8 0t0 9215811 pipe
php 4403 root 22r FIFO 0,8 0t0 9215811 pipe
php 4403 root 23r FIFO 0,8 0t0 9215811 pipe
php 4403 root 24r FIFO 0,8 0t0 9215811 pipe
php 4403 root 25r FIFO 0,8 0t0 9215811 pipe
php 4403 root 26r FIFO 0,8 0t0 9215811 pipe
php 4403 root 27r FIFO 0,8 0t0 9215811 pipe
php 4403 root 28r FIFO 0,8 0t0 9215811 pipe
php 4403 root 29r FIFO 0,8 0t0 9215811 pipe
php 4403 root 30r FIFO 0,8 0t0 9215811 pipe
php 4403 root 31r FIFO 0,8 0t0 9215811 pipe
php 4403 root 32r FIFO 0,8 0t0 9215811 pipe
php 4403 root 33r FIFO 0,8 0t0 9215811 pipe
php 4403 root 34r FIFO 0,8 0t0 9215811 pipe
php 4403 root 35r FIFO 0,8 0t0 9215811 pipe
php 4403 root 36r FIFO 0,8 0t0 9215811 pipe
To tylko fragment. W rzeczywistości jest około 1200 z tych plików FIFO
otwartych.
Czy ktoś wie, co powoduje tworzenie plików? Jakie rodzaje kodu spowodowałyby, że system otworzyłby nowy plik FIFO? Do czego służą te pliki?
Szybkie Google informuje, że pliki FIFO są nazwane potokami. Coś w twoim scenariuszu lub w superwizorze tworzy te rury. Zajrzyj do nazwanych potoków w podręczniku PHP i zobacz, czy nie możesz wyśledzić kodu tworzącego rury. – Styphon
Czy wiesz, jakie rodzaje kodu mogą spowodować, że system utworzy nazwane potoki? Wiem, że to szerokie pytanie, ale nie jestem pewien, od czego zacząć. Działający kod synchronizuje obiekty między moim systemem wewnętrznym a systemem zewnętrznym za pomocą interfejsu API Bigcommerce za pomocą ich [PHP SDK] (https://github.com/bigcommerce/bigcommerce-api-php). Dlatego ciągle przesuwa i wyciąga informacje z BigCommerce. Poprzednio otwierałem zbyt wiele połączeń, powodując zbyt dużą liczbę otwartych błędów w plikach, ale zostało to rozwiązane i ten problem FIFO zajął jego miejsce. – flyingL123
Nie jestem zaznajomiony ani z beanstalkd ani superwordorem, ale osobiście zacznę od [przeszukiwania twojej bazy kodu] (https://github.com/ggreer/the_silver_searcher) dla 'proc_open' lub' mkfifo'. – bishop