Hướng dẫn khắc phục lỗi Apache: No space left on device

29-May-2018

Bài viết sau sẽ hướng dẫn các bạn sửa lỗi No space left on device trên Apache.

Để biết khi Apache không start lên có phải do lỗi trên không chúng ta có thể kiểm tra qua file log của Apache ví dụ:

# tail -100 /var/log/apache/error_log

Log sẽ có ghi dòng lỗi “No space left on device: Couldn’t create accept lock”

Để khắc phục ta thực hiện:

B1: Kiểm tra dung lượng ổ cứng:

Chúng ta có thể kiểm tra bằng 2 lệnh:

# df –h

# df -i

Nếu sau khi kiểm tra bị đầy ổ cứng hoặc inode chúng ta cần giải phóng bớt dung lượng ổ cứng hoặc Inode cho disk.

Trường hợp 2 lệnh trên kiểm tra đều không bị đầy. Chúng ta có thể thực hiện kiểm tra tiếp bước 2.

B2: Xóa các Semaphore:

Trong quá trình hoạt động Apache sử dụng các Semaphore để gia tiếp giữa các Process cha và Process con. Trong quá trình hoạt động có thể apache không tự Clear được các Semaphore này dẫn đến tràn phần bộ nhớ dành cho Semaphore và Apache không thể hoạt động.

  • 1.Thực hiện kiểm tra semaphore bằng lệnh ipcs –s

# ipcs -s

------ Semaphore Arrays --------

key semid owner perms nsems

0x00000000 0 root 600 1

0x00000000 32769 root 600 1

0x00000000 4980738 apache 600 1

0x00000000 5013507 apache 600 1

0x7a030690 29261828 zabbix 600 13

[...]

0x00000000 38273132 apache 600 1

0x00000000 38305901 apache 600 1

0x00000000 38338670 apache 600 1

0x00000000 39387247 apache 600 1

0x00000000 39420016 apache 600 1

0x00000000 39452785 apache 600 1

  • 2.Thực hiện xóa các semaphore tồn đọng trên bằng lệnh sau:

# for i in `ipcs -s | awk '/apache/ {print $2}'`; do (ipcrm -s $i); done

  • 3.Thực hiện tang semaphore trong file /ect/sysctl.conf để chắc chắn Apache có thể Start

# vi /ect/sysctl.conf

kernel.msgmni = 1024

kernel.sem = 250 256000 32 1024

  • 4.Cuối cùng chạy lệnh sysctl –p để apply cấu hình trên

# sysctl -p

Chúc bạn thành công!