4 个解决方案
#1
你怎么分配的?
char buf[ 1024000000 ]?如果是静态分配,因为是在栈空间分配,这是不允许的。
如果是malloc/calloc之类的动态分配,则完全应该可以分配的。
如果确实是malloc失败,则可以显示errno, strerror(errno)看看到底是什么原因导致分配失败。
char buf[ 1024000000 ]?如果是静态分配,因为是在栈空间分配,这是不允许的。
如果是malloc/calloc之类的动态分配,则完全应该可以分配的。
如果确实是malloc失败,则可以显示errno, strerror(errno)看看到底是什么原因导致分配失败。
#2
是通过malloc来分配的,连续分配10次,每次分配100M,但最后一次分配的时候分配出来的指针为空。对应的错误码是12,错误信息为Not enough space。
#3
不会吧,代码贴出来瞧瞧?
当分配失败的时候,有没有用ps -el|grep 进程名称 看看你的进程到底占用了多少了内存?
另外,是否存在有别的进程占用了较多的内存(ps -el)?
最后,uname -a看看你的OS信息
当分配失败的时候,有没有用ps -el|grep 进程名称 看看你的进程到底占用了多少了内存?
另外,是否存在有别的进程占用了较多的内存(ps -el)?
最后,uname -a看看你的OS信息
#4
还有,可以通过ulimit -a看看os的限制,也许真正是系统限制的原因
下面的程序可以读写os的限制
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/resource.h>
int main(void)
{
struct rlimit r;
if(getrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"getrlimit error\n");
exit(1);
}
printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);
printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);
/** set limit **/
/*
r.rlim_cur=100;
r.rlim_max=200;
if (setrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"setrlimit error\n");
exit(1);
}
// get value of set
if(getrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"getrlimit error\n");
exit(1);
}
printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);
printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);
*/
return 0;
}
各种限制参数在/usr/include/sys/resource.h中
#define RLIMIT_CPU 0 /* cpu time in milliseconds */
#define RLIMIT_DATA 2 /* data size */
#define RLIMIT_STACK 3 /* stack size */
#define RLIMIT_RSS 5 /* resident set size */
#define RLIMIT_FSIZE 1 /* maximum file size */
#define RLIMIT_CORE 4 /* core file size */
#define RLIMIT_NOFILE 6 /* maximum number of open files */
#define RLIMIT_OPEN_MAX RLIMIT_NOFILE /* maximum number of open files */
#define RLIMIT_AS 7 /* maximum number of open files */
#define RLIMIT_TCACHE 8 /* maximum number of cached threads */
#define RLIMIT_AIO_OPS 9 /* maximum number of POSIX AIO ops */
#define RLIMIT_AIO_MEM 10 /* maximum bytes locked for POSIX AIO */
#define RLIMIT_RSESTACK 11 /* RSE stack size */
#define RLIM_NLIMITS 12 /* number of resource limits */
下面的程序可以读写os的限制
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/resource.h>
int main(void)
{
struct rlimit r;
if(getrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"getrlimit error\n");
exit(1);
}
printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);
printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);
/** set limit **/
/*
r.rlim_cur=100;
r.rlim_max=200;
if (setrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"setrlimit error\n");
exit(1);
}
// get value of set
if(getrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"getrlimit error\n");
exit(1);
}
printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);
printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);
*/
return 0;
}
各种限制参数在/usr/include/sys/resource.h中
#define RLIMIT_CPU 0 /* cpu time in milliseconds */
#define RLIMIT_DATA 2 /* data size */
#define RLIMIT_STACK 3 /* stack size */
#define RLIMIT_RSS 5 /* resident set size */
#define RLIMIT_FSIZE 1 /* maximum file size */
#define RLIMIT_CORE 4 /* core file size */
#define RLIMIT_NOFILE 6 /* maximum number of open files */
#define RLIMIT_OPEN_MAX RLIMIT_NOFILE /* maximum number of open files */
#define RLIMIT_AS 7 /* maximum number of open files */
#define RLIMIT_TCACHE 8 /* maximum number of cached threads */
#define RLIMIT_AIO_OPS 9 /* maximum number of POSIX AIO ops */
#define RLIMIT_AIO_MEM 10 /* maximum bytes locked for POSIX AIO */
#define RLIMIT_RSESTACK 11 /* RSE stack size */
#define RLIM_NLIMITS 12 /* number of resource limits */
#1
你怎么分配的?
char buf[ 1024000000 ]?如果是静态分配,因为是在栈空间分配,这是不允许的。
如果是malloc/calloc之类的动态分配,则完全应该可以分配的。
如果确实是malloc失败,则可以显示errno, strerror(errno)看看到底是什么原因导致分配失败。
char buf[ 1024000000 ]?如果是静态分配,因为是在栈空间分配,这是不允许的。
如果是malloc/calloc之类的动态分配,则完全应该可以分配的。
如果确实是malloc失败,则可以显示errno, strerror(errno)看看到底是什么原因导致分配失败。
#2
是通过malloc来分配的,连续分配10次,每次分配100M,但最后一次分配的时候分配出来的指针为空。对应的错误码是12,错误信息为Not enough space。
#3
不会吧,代码贴出来瞧瞧?
当分配失败的时候,有没有用ps -el|grep 进程名称 看看你的进程到底占用了多少了内存?
另外,是否存在有别的进程占用了较多的内存(ps -el)?
最后,uname -a看看你的OS信息
当分配失败的时候,有没有用ps -el|grep 进程名称 看看你的进程到底占用了多少了内存?
另外,是否存在有别的进程占用了较多的内存(ps -el)?
最后,uname -a看看你的OS信息
#4
还有,可以通过ulimit -a看看os的限制,也许真正是系统限制的原因
下面的程序可以读写os的限制
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/resource.h>
int main(void)
{
struct rlimit r;
if(getrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"getrlimit error\n");
exit(1);
}
printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);
printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);
/** set limit **/
/*
r.rlim_cur=100;
r.rlim_max=200;
if (setrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"setrlimit error\n");
exit(1);
}
// get value of set
if(getrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"getrlimit error\n");
exit(1);
}
printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);
printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);
*/
return 0;
}
各种限制参数在/usr/include/sys/resource.h中
#define RLIMIT_CPU 0 /* cpu time in milliseconds */
#define RLIMIT_DATA 2 /* data size */
#define RLIMIT_STACK 3 /* stack size */
#define RLIMIT_RSS 5 /* resident set size */
#define RLIMIT_FSIZE 1 /* maximum file size */
#define RLIMIT_CORE 4 /* core file size */
#define RLIMIT_NOFILE 6 /* maximum number of open files */
#define RLIMIT_OPEN_MAX RLIMIT_NOFILE /* maximum number of open files */
#define RLIMIT_AS 7 /* maximum number of open files */
#define RLIMIT_TCACHE 8 /* maximum number of cached threads */
#define RLIMIT_AIO_OPS 9 /* maximum number of POSIX AIO ops */
#define RLIMIT_AIO_MEM 10 /* maximum bytes locked for POSIX AIO */
#define RLIMIT_RSESTACK 11 /* RSE stack size */
#define RLIM_NLIMITS 12 /* number of resource limits */
下面的程序可以读写os的限制
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/resource.h>
int main(void)
{
struct rlimit r;
if(getrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"getrlimit error\n");
exit(1);
}
printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);
printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);
/** set limit **/
/*
r.rlim_cur=100;
r.rlim_max=200;
if (setrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"setrlimit error\n");
exit(1);
}
// get value of set
if(getrlimit(RLIMIT_NOFILE,&r)<0)
{
fprintf(stderr,"getrlimit error\n");
exit(1);
}
printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);
printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);
*/
return 0;
}
各种限制参数在/usr/include/sys/resource.h中
#define RLIMIT_CPU 0 /* cpu time in milliseconds */
#define RLIMIT_DATA 2 /* data size */
#define RLIMIT_STACK 3 /* stack size */
#define RLIMIT_RSS 5 /* resident set size */
#define RLIMIT_FSIZE 1 /* maximum file size */
#define RLIMIT_CORE 4 /* core file size */
#define RLIMIT_NOFILE 6 /* maximum number of open files */
#define RLIMIT_OPEN_MAX RLIMIT_NOFILE /* maximum number of open files */
#define RLIMIT_AS 7 /* maximum number of open files */
#define RLIMIT_TCACHE 8 /* maximum number of cached threads */
#define RLIMIT_AIO_OPS 9 /* maximum number of POSIX AIO ops */
#define RLIMIT_AIO_MEM 10 /* maximum bytes locked for POSIX AIO */
#define RLIMIT_RSESTACK 11 /* RSE stack size */
#define RLIM_NLIMITS 12 /* number of resource limits */