2013-11-04 25 views
20

Gần đây tôi đã nâng cấp lên OSX Mavericks và kể từ đó, tôi đã bắt đầu nhận được lỗi nói trên trên máy phát triển của mình. Không có vấn đề rõ ràng trong mã (nó là một ứng dụng mẫu tự động tạo ra Yii). Điều gì đã xảy ra trong quá trình nâng cấp lên Mavericks là:Apache PHP/OSX Mavericks: - không thể mở luồng: Quá nhiều tệp mở

  1. PHP đã được nâng cấp từ phiên bản 5.2.x đi kèm OSX Lion đến 5.4.x.
  2. Tôi phải lấy Zend Debugger cho PHP 5.4 bằng cách cài đặt Zend Server, chọn ZendDebugger.so và gỡ cài đặt Zend Server (tất cả điều này vì Zend không cung cấp phiên bản độc lập của trình gỡ lỗi cho php 5.4.x).

Kể từ đó, tôi gặp sự cố này sau khi tải và tải lại trang web một vài lần. Sau khi lỗi này xảy ra, máy chủ web của tôi liên tục trả về cùng một lỗi cho bất kỳ ứng dụng nào khác được lưu trữ trên máy chủ cục bộ. Tôi phải đề cập đến rằng các trang web tĩnh được phục vụ tốt.

Tôi đã xem một số threads về chủ đề này. Hầu hết chỉ ra các vấn đề trong mã mà các tay cầm tập tin không được đóng đúng cách, qua đó vượt qua ngưỡng giới hạn tệp mở. Tôi cũng tìm thấy điều này thread mà dường như đề nghị này có thể là một vấn đề trình gỡ lỗi zend. Ngoài ra còn có một số bug report được gửi cho php 5.2.x. Sau thread here, tôi thử như sau:

$ ulimit -a 

mà báo cáo:

open files (-n) 256 

Ngoài ra,

sysctl -a | grep files 

lợi nhuận,

kern.maxfiles = 12288 
kern.maxfilesperproc = 10240 
kern.maxfiles: 12288 
kern.maxfilesperproc: 10240 
kern.num_files: 3248 

Một thú vị thread đề xuất tăng giới hạn này (hiện tại là 256) bằng cách sử dụng:

ulimit -n 1024 

Tôi đã thử mọi thứ, nhưng không có gì có vẻ hiệu quả. Vấn đề cũng không thể tái sản xuất liên tục.

Tôi tự hỏi đang sử dụng ulimit -n 1024 sẽ ảnh hưởng đến apache, kể từ những gì tôi đã đọc, nó ảnh hưởng đến số lượng tệp vỏ có thể mở.

Mọi trợ giúp đều được đánh giá cao.

EDIT:

  1. Khởi động lại apache giúp cho một chút, cho đến khi lỗi được gặp lại.
  2. Rời khỏi máy chủ web không hoạt động một chút (không có khoảng thời gian xác định) cũng sẽ giúp ích.

Trả lời

1

Tôi có thể bị quá tải thông tin. Một lời giải thích có thể được cung cấp here mà tôi cũng đã đề cập trong bài đăng gốc của tôi. Tôi đoán tôi đã bỏ lỡ các chi tiết nhỏ trong đó OP đề cập đến việc anh ấy đang làm việc trên Mac OSX 10.8.x. Tôi đang trên 10,9 vì vậy tôi đã tải xuống zenddebugger.so từ trang và mọi thứ đang có vẻ tốt. Chưa nhận được một đơn too many open files cả ngày.

Vì vậy, có lẽ đó là sự cố ZendDebugger.

+0

Điều này đã sửa nó cho tôi. Đã hơn một tháng kể từ khi tôi thấy lỗi đó một lần nữa. –

16

shamelessly bị đánh cắp từ http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X

Để kiểm tra các giới hạn hiện tại trên hệ thống Mac OS X của bạn, hãy chạy:

$ launchctl limit maxfiles 

Hai cột cuối cùng là những giới hạn cứng và mềm, tương ứng.

Để điều chỉnh giới hạn tập tin mở tối đa trong OS X 10.7 (Lion) hoặc mới hơn, chỉnh sửa /etc/launchd.conf và tăng giới hạn cho cả hai giá trị cho phù hợp.

Ví dụ, để thiết lập các giới hạn mềm để 16.384 tác phẩm, và giới hạn khó 32768 file, thực hiện các bước sau:

Xác nhận giới hạn hiện tại:

$ launchctl limit 

    cpu   unlimited  unlimited 
    filesize unlimited  unlimited 
    data  unlimited  unlimited 
    stack  8388608  67104768 
    core  0    unlimited 
    rss   unlimited  unlimited 
    memlock  unlimited  unlimited 
    maxproc  709   1064 
    maxfiles 10240   10240 

Chỉnh sửa (hoặc tạo) /etc/launchd.conf và tăng giới hạn. Thêm các dòng trông giống như sau (sử dụng các giá trị phù hợp với môi trường của bạn):

limit maxfiles 16384 32768 

Lưu tệp và khởi động lại hệ thống để các giới hạn mới có hiệu lực. Sau khi khởi động lại, hãy xác minh các giới hạn mới bằng lệnh giới hạn launchctl:

$ launchctl limit 

    cpu   unlimited  unlimited 
    filesize unlimited  unlimited 
    data  unlimited  unlimited 
    stack  8388608  67104768 
    core  0    unlimited 
    rss   unlimited  unlimited 
    memlock  unlimited  unlimited 
    maxproc  709   1064 
    maxfiles 16384   32768 
+0

Cảm ơn nỗ lực của bạn. Tôi đã đề cập rằng tôi đã thử tăng giới hạn tệp mở tối đa. Nó không giúp tôi nhiều như cuối cùng mọi giới hạn đều bị đánh trúng. –

+1

Xin chào, tôi đã thử điều này, nhưng ngay cả sau khi khởi động lại mac của tôi, giới hạn launchctl vẫn trả về giá trị ban đầu. /etc/launchd.conf dường như không được xem xét. Tôi đang chạy trên Mavericks 10.9. Bất kỳ ý tưởng? – BoilingLime

+0

Trên Mavericks giới hạn cứng 'maxfiles' phải là" không giới hạn ". Dù sao, bạn vẫn có thể thiết lập các giới hạn khác nhau và các công cụ môi trường khác trong '/ etc/launchd.conf'. Nhưng hãy cẩn thận: Nếu có lỗi cú pháp trong tập tin này tất cả mọi thứ bị bỏ qua (vẫn tốt hơn so với từ chối khởi động hoặc đăng nhập mặc dù). – okket

0

Về câu trả lời vá lỗi trình gỡ lỗi ở trên. Thật không may câu trả lời được cung cấp ở trên sẽ không hiệu quả với tôi, vì nó áp dụng cho các phiên bản php 5.4 và tôi phải giới hạn bản thân mình với php 5.3.

Zend đã phát hành phiên bản 6.3 của máy chủ, hỗ trợ php ở mức 5.3. Tôi đã được chơi với cài đặt trong một thời gian ngắn (sau khi giảm ulimit của tôi trở lại mặc định của Apple) để kiểm tra nó và không gặp bất kỳ vấn đề. Trước khi nâng cấp, tôi không thể thực hiện bất kỳ sửa lỗi php nào mà không tăng giới hạn đó.

+0

Vâng lỗi đã được khắc phục trong Zend Server 6.2 http://forums.zend.com/viewtopic.php?t=110823&start=10 – drewish

2

Nếu bạn đang gặp vấn đề này trong khi chạy Apache, bạn có thể cấu hình apache để tăng giới hạn:

$ sudo vi /usr/sbin/apachectl

xác định vị trí: ULIMIT_MAX_FILES=""

và thay đổi dòng này thành một cái gì đó như:

ULIMIT_MAX_FILES="ulimit 4096"

Sau đó: sudo apachectl restart

này sẽ không làm việc cho các kịch bản CLI. Nhưng việc thêm một ulimit trực tiếp vào ~/.bash_profile (hoặc tương đương) của bạn sẽ hoạt động cho mục đích đó.

Điều này có lợi thế là đặt giới hạn cụ thể cho apache và thiết bị đầu cuối của bạn mà không ảnh hưởng đến các ứng dụng khác.

Ngoài ra, bạn sẽ có thể điều chỉnh phương thức này cho các hệ điều hành khác bằng cách thay thế ulimit bằng lệnh áp dụng cho môi trường đó.

1

Tôi đã gặp sự cố tương tự trên El Capitain. Tìm thấy một bài báo here Tôi nợ tín dụng do giải pháp. Thực hiện theo các hành động bên dưới:

Điều chỉnh giới hạn tệp mở Để điều chỉnh các tệp mở giới hạn trên toàn hệ thống trên Yosemite trở lên, bạn cần tạo hai tệp cấu hình. Đầu tiên là một danh sách tài sản (aka plist) tập tin trong /Library/LaunchDaemons/limit.maxfiles.plist có chứa các cấu hình XML sau:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
    <plist version="1.0"> 
    <dict> 
     <key>Label</key> 
     <string>limit.maxfiles</string> 
     <key>ProgramArguments</key> 
     <array> 
      <string>launchctl</string> 
      <string>limit</string> 
      <string>maxfiles</string> 
      <string>65536</string> 
      <string>65536</string> 
     </array> 
     <key>RunAtLoad</key> 
     <true/> 
     <key>ServiceIPC</key> 
     <false/> 
    </dict> 
    </plist> 

này sẽ thiết lập các tập tin mở hạn chế đến 65536. Thứ hai tập tin cấu hình plist nên được lưu trữ trong /Library/LaunchDaemons/limit.maxproc.plist với các nội dung sau:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
    <plist version="1.0"> 
    <dict> 
     <key>Label</key> 
     <string>limit.maxproc</string> 
     <key>ProgramArguments</key> 
     <array> 
      <string>launchctl</string> 
      <string>limit</string> 
      <string>maxproc</string> 
      <string>2048</string> 
      <string>2048</string> 
     </array> 
     <key>RunAtLoad</key> 
     <true /> 
     <key>ServiceIPC</key> 
     <false /> 
    </dict> 
    </plist> 

Cả hai file plist phải được sở hữu bởi root: bánh xe và có quyền -rw-r-r -. Khởi động lại hệ thống.

Ngoài ra nó đề nghị thiết lập chúng cho phiên người dùng trong .bashrc và thêm:

ulimit -n 65536 
ulimit -u 2048 

Hope this helps.

Các vấn đề liên quan