Na moim serwerze internetowym (działa apache, Linux CentOS), jest bardzo duży plik dziennika ( 50 Gbyte ). Ten serwer sieciowy ma w produkcji niektóre usługi sieciowe.
Kiedy próbowałem usunąć plik dziennika, serwer sieciowy nie odpowiedział przez około 10 sekund. (Czas serwisowania.)
rm -f monthly.log
Czy jest jakiś sposób, aby usunąć ten duży plik bez zamrażania apache?
linux
apache-2.2
centos
Jinbom Heo
źródło
źródło
Aby przyspieszyć usuwanie dużych plików, możesz użyć
truncate
polecenia - Powiedz, aby zmniejszyć go do zera, a następnie usuń:Jednak zgodnie z zaleceniami kwanty należy najpierw przeprowadzić logrotację.
źródło
truncate
różni>
?truncate
Jest łatwiejszy w użyciusudo
niż>
. Jest to również łatwiejsze dziękifind -exec
.źródło
>logfile
nie potrzebujesz echaSkróciłem / wyzerowałem plik za pomocą
: > /path/to/monthly.log
operacji. Następnie ewentualnie zrestartuj proces Apache i skonfiguruj rotację logów, aby zapobiec takim sytuacjom w przyszłości ...Często się to zdarza:
Zobacz: Czy istnieje sposób na usunięcie 100 GB pliku w systemie Linux bez obciążania operacji we / wy?
W Unixie, jaki jest najlepszy sposób na zmniejszenie rozmiaru ogromnego pliku dziennika, który jest aktywnie zapisywany?
Serwer Linux nie ma miejsca
źródło
:
. Możesz po prostu zrobić> /path/to/monthly.log
noop
, ale ma to większy sens z perspektywy instruktażowej.true > /path/to/monthly.log
zrobiłby tego samego, a zatem jest mniej archaiczny:
?Jeśli nie potrzebujesz danych, skróć je, używając / dev / null:
Serwer WWW będzie nadal zapisywał dane do pliku po obcięciu, co pozwala uniknąć konieczności ponownego uruchamiania serwera (w przeciwieństwie do
rm monthly.log
usuwania pliku).Po rozwiązaniu natychmiastowego kryzysu rozważ logrotację, jak zasugerowała Quanta. Nie chcesz, żeby to się powtórzyło. Zauważ, że pliki dziennika Apache są już domyślnie obrócone w CentOS
Rozważ także wysyłanie dzienników sieciowych przez syslog (
/usr/bin/logger
na przykład za pomocą ). Dzienniki tworzone przy użyciu syslog również zwykle mają już skonfigurowane Logrotation.źródło
>logfile
nie potrzebować catJeśli używasz systemu plików ext3, rozważ przejście na ext4.
Ext3 może być powolny w usuwaniu dużych plików, ponieważ przechowuje lokalizację każdego pojedynczego bloku 4k: plik 50GiB (50 * 1024 ^ 3 bajtów) zajmuje 13107200 bloków, z których każdy jest zapisany w tabeli i-węzłów jako 32-bitowy numer bloku , w sumie 50 MB danych księgowych, aby śledzić, gdzie znajduje się zawartość pliku na dysku. Ta duża lista bloków może być rozproszona na wiele bloków pośrednich , z których wszystkie muszą zostać zaktualizowane po usunięciu pliku. Prawdopodobnie przyczyną opóźnień jest próba uzyskania dostępu do wszystkich pośrednich bloków.
Z drugiej strony Ext4 przydziela pliki w „zakresach” do 128 MB. Ten plik 50GiB można zapisać w tabeli i-węzłów przy użyciu zaledwie 400 rekordów zasięgu, zamiast 13107200 pojedynczych numerów bloków, co radykalnie zmniejsza ilość operacji we / wy dysku podczas usuwania pliku.
Zauważ, że jeśli przekonwertujesz istniejący system plików ext3 w miejsce na ext4, nowe pliki zostaną przydzielone przy użyciu zakresu, ale istniejące pliki nadal będą korzystać z list bloków. Możesz użyć
chattr +e
polecenia, aby ponownie przydzielić istniejący plik przy użyciu zakresu; pod względem wydajności jest to porównywalne do wykonania kopii pliku, a następnie usunięcia oryginału.źródło
Sprowadza się to do problemu z wydajnością systemu plików. Na to pytanie SO można znaleźć interesującą odpowiedź, ale zależy to raczej od używanego systemu plików. Użyłem XFS podczas tworzenia systemu plików do przechowywania setek wielogigabajtowych plików MPEG2 dla MythTV, ponieważ w tym czasie wydajność usuwania XFS była znacznie lepsza niż ext3. Mogło się znacznie zmienić w kolejnych latach.
Podoba mi się odpowiedź @ quanta. Podzielenie pliku na mniejsze części spowoduje szybsze usunięcie.
źródło
Problem wynika, jak sądzę, z tego, że usuwasz plik z uprzywilejowanego użytkownika, który ma większy priorytet w operacjach na dysku niż użytkownik serwera WWW Apache. Niezależnie od tego, w jaki sposób chcesz usunąć plik dziennika (rm -f lub skrócić o>), powinieneś zmniejszyć jego priorytetowe operacje na dysku do minimum:
źródło