About ACE "Max Number of AIOs 1024" problem under Linux.

来源:互联网 发布:女主播播放软件 编辑:程序博客网 时间:2024/05/17 05:18

This problem comes from POSIX_Proactor.cpp, line 970.   The default max number of AIO of linux is 1024. By running command "ulimit -n", we can get this value.

The resolution is simple, according to this article.  We have to modify several files to break the limit of system.

1. edit /etc/security/limits.conf, set the limit for the user/group who want to break the limit, such as:

...igamesoftnofile4096igamehardnofile4096# End of file

2. edit /etc/pam.d/common-session and /etc/pam.d/common-session-noninteractive, add the following lines:

...session requiredpam_limits.so# end of pam-auth-update config

Now, reboot and run "ulimit -n", we will get a value of 4096.

Next step, we have to modify ACE source code.

1. Edit ace/POSIX_Proactor.h, replace line 36, 37 with the following code:

// igame update the max size to 4096, default size to 1024//#define ACE_AIO_MAX_SIZE     2048//#define ACE_AIO_DEFAULT_SIZE 1024#define ACE_AIO_MAX_SIZE     4096#define ACE_AIO_DEFAULT_SIZE 2048#warning("Igame changed the AIO size: max 4096, default 2048")

We doubled the max and default AIO value.

2. If you think the the "Max Number of AIOs xxxx" really annoy, you can search "ACE_POSIX_AIOCB_Proactor::Max Number of AIOs=%d" in ace/POSIX_Proactor.h and comment the respective lines.

3. make clean && make and then install.

Note if you want to install libACExxx into /usr, you should run "make install" in $ACE_ROOT with root's shell.

Now we can re-compile our program and run it. If we didn't comment the tip, we will get output like this:

(17066 | 140737320802048) ACE_POSIX_AIOCB_Proactor::Max Number of AIOs=2048







0 0
原创粉丝点击