Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Chuyển từ application sang service trong Linux cần lưu ý điểm gì?

  1. #1
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Mặc định Chuyển từ application sang service trong Linux cần lưu ý điểm gì?

    Hi experts!
    Mình gặp 1 vấn đề thế này: khi mình tạo 1 chương trình C++ (dạng console application) trên Red hat Linux, sau đó build ra file chạy.
    + Nếu chạy trên cửa sổ terminal thì chương trình của mình chỉ chiếm khoảng 0,2% CPU.
    + Mình cần dựng app của mình thành service (vì chương trình này cần chạy 24/7), sau khi dựng xong thì thấy chương trình của mình chiếm tới 12% CPU. (dùng lệnh top để xem).
    Câu hỏi của mình là:
    + Lí do gì đã khiến cùng 1 chương trình mà lại ngốn tài nguyên khác nhau nhiều như vậy, khi chạy trên terminal và chạy dạng service????
    + Khi chuyển từ app -> service thì cần phải lưu ý các điểm gì.

    * Vì 1 vài lí do tế nhị, mình không thể post source code lên được, và các đoạn printf() trong chương trình mình đã disable hết đi.
    Rất mong được các cao thủ chỉ giáo.

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Không có cái gì để xác định thì chúa cũng bó tay không biết sờ vào chỗ nào. Bạn chạy ở level nào, và bạn thiết lập service của bạn ở mấy level? Bạn cần nó chạy ở những level nào?

    Phần lớn sự cố tốn kém tài nguyên là do chương trình của bạn! Nói chung, service chỉ nên làm 1 việc duy nhất đó là lắng nghe dịch vụ. Tuy nhiên, bạn cũng có thể kiểm tra xem có bao nhiêu process đang được mở bởi service của bạn bằng lệnh: pgrep procname

    Bạn hãy kiểm tra xem lượng process như vậy có đúng đắn không?
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Service được chạy ở level 345, khi dùng lệnh pgrep thì chỉ có duy nhất 1 process được mở bởi service thôi.
    Lưu ý là: service của tôi chỉ execute duy nhất 1 process, mà cái process đó khi chạy trên cửa sổ terminal nó chiếm rất ít CPU (0,2%).

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Ở terminal chương trình của bạn chạy với quyền user, còn ở service ứng dụng của bạn sẽ chạy dưới quyền root. Điều này có thể dẫn đến việc xử lý của ứng dụng sẽ khác nhau, và sự khác nhau đó chỉ có bạn mới có thể biết!

    Bạn cũng có thể kiểm tra xem có bao nhiêu theads đang được chạy với service hoặc terminal bằng ps ax | grep procname rồi đem so sánh với nhau.

    Nếu bạn còn hỏi thêm, chắc chắn là mình cũng bó tay! Và bạn cũng lưu ý rằng cách hỏi của bạn cũng làm cho mình không muốn trả lời nữa, và người khác có lẽ cũng vậy!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  5. #5
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    + Trên terminal cũng chạy bằng quyền root.
    + Chương trình thiết kế cho multithread, chính xác là có 3 thread được chạy.
    + Do chương trình có sử dụng API và lib bên ngoài (thuộc về chuyên ngành viễn thông) và project cũng khá lớn nên tôi không thể post source code lên được, vì có post lên mọi người cũng không build được.
    + Dẫu biết câu hỏi tôi đặt ra là khó, song vào hoàn cảnh của tôi có lẽ mọi người cũng chỉ mô tả vấn đề được như vậy (hoặc chỉ clear hơn 1 chút).
    * Cuối cùng, thanks Kevin Hoàng.

  6. #6
    Ngày gia nhập
    09 2011
    Bài viết
    16

    Mặc định stdin/out/er

    bạn thử lục lọi trong /proc/id process của bạn coi! vì bạn call lib nên tôi nghĩ khi daemon sẽ log vào đâu đó ! lưới thì gprof

Các đề tài tương tự

  1. [MFC => WinService] Cách chuyển app từ MFC sang dạng Service ?
    Gửi bởi vodanhdaokhach trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 11-04-2013, 04:54 PM
  2. gọi form application từ windown service như thế nào?
    Gửi bởi i4uandu4i trong diễn đàn Dự án & Source code C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 12-09-2012, 08:23 AM
  3. Cần giúp đỡ chuyển code từ win form của C# sang dạng service
    Gửi bởi skynormal trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 07-05-2012, 02:03 PM
  4. Không set service login được trong lập trình windows service
    Gửi bởi thienthanittk37 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 29-12-2011, 08:35 AM
  5. Tìm sách Linux Application Development
    Gửi bởi choaipro trong diễn đàn Công cụ, Tài liệu lập trình trên Linux
    Trả lời: 6
    Bài viết cuối: 24-10-2011, 11:41 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn