Sponsored Content
Top Forums Programming Stress testing memory using malloc in linux ?? Post 302380318 by frozensmilz on Monday 14th of December 2009 09:19:47 PM
Old 12-14-2009
Thanks a lot for the help. It gave me a start (keywords for googling Smilie )...given below is the code for filling the memory in linux ....yes the swap is unavailable. The vendor installed it that way.

Code:
// blast.cpp - MEMORY STRESS TEST SCRIPT
//
// Note: This allocates huge blocks of memory and fills with 1
//
// MAINTENANCE HISTORY
// DATE         AUTHOR AND DETAILS
// 15-12-09     BAS     TR - ORIGINAL (modified)
//
//----------------------------------------------------------------------------79

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

 #define MEGABYTE 1024*1024

 int main(int argc, char *argv[])
 {
         void *myblock = NULL;
         int count = 0;
         char ch,*mem;

         if ( argv[1] == NULL ) {
                 printf("usage: blast <memmory space>\n");
                 exit(0);
         }

         int memReq = 0;
         memReq = strtol (argv[1],&mem,10);

         //while (1)
         while (count < memReq)
         {
                 myblock = (void *) malloc(MEGABYTE);
                 if (!myblock) break;
                 memset(myblock,1, MEGABYTE);
                 printf("Currently allocating %d MB\n", ++count);
         }

         do {
                 printf("Hit 'y' to exit...\n");
                 scanf("%c",&ch);
         } while ( ch == 'y' );

         free(myblock);
         exit(0);
 }

Actual source:
When Linux Runs Out of Memory - O'Reilly Media

BASIL B.C.

Last edited by pludi; 12-15-2009 at 02:32 AM.. Reason: code tag
 

10 More Discussions You Might Find Interesting

1. Programming

malloc gives the same memory to two different nodes. How to deal with it?

When allocating memory for two different nodes, the resulting memory are the same. Clearly, this will lead to a mistake. This happened in a function. And the process must be in a function. (gdb) p tree->list $43 = (node *) 0x8be4180 (gdb) p tree->list $44 = (node *) 0x8be4180 At the... (2 Replies)
Discussion started by: cdbug
2 Replies

2. Solaris

how to stress the memory

Hi All, Is there way to stress memory on Solaris 10? If yes, how do I monitor the memory usage? (3 Replies)
Discussion started by: samnyc
3 Replies

3. UNIX and Linux Applications

Solaris & Linux memory stress test?

I'm looking for a script or some other application that will use up a lot of memory on a Solaris or Linux server, in order to test a monitoring application. So far I have found a script that's good for CPU usage but it does nothing for memory. I have also tried the application called 'stress'... (0 Replies)
Discussion started by: Kraas
0 Replies

4. Programming

Why memory allocated through malloc should be freed ?

Actually for a process to run it needs text, stack , heap and data segments. All these find a place in the physical memory. Out of these 4 only heap does exist after the termination of the process that created it. I want to know the exact reason why this happens. Also why the other process need to... (20 Replies)
Discussion started by: karthiktceit
20 Replies

5. Programming

Regarding the maximum memory allocated by malloc() function on HP-UX B11.11

In a 'C' program,when I am trying to allocate memory with the help of malloc () function, it is allocating the memory up to a certain limit for e.g. in my case, it is 670 MB (approx). malloc() returns NULL if I allocate more than this amount of memory.When I tried to allocate memory in chunks of... (1 Reply)
Discussion started by: vipinsachan
1 Replies

6. Shell Programming and Scripting

Stress testing php files at Unix/Linux Command line

Hi, Your great help is very appreciated. I am looking for any Unix command or tool for doing Stress/Load test of php files at command prompt. I tried torture.pl but it is not working after20 concurrent threads/users. as it is very urgent for me..please suggest ur ideas asap. thanks (5 Replies)
Discussion started by: Malleswari
5 Replies

7. Programming

./match_pattern.out: malloc(): memory corruption: 0x0000000013a11600 ***

Hi All, I have a simple code which does some computation by matching string patterns. In brief: 1. The code reads .dat and .txt files. 2. .dat files are huge text files and .txt files contain some important words. 3. I am just doing strstr to find the patterns. 4. The function returns the... (3 Replies)
Discussion started by: shoaibjameel123
3 Replies

8. Programming

glib detected: malloc() memory curruption

I am using libxml2 library for XMl parsing and libxml++ is C++ wrapper over that. So I am using API of libxml++. I am creating my class and composing instance xmlpp::Node *pNode in that. my class also have funciton prepareXPathQuery() which creates query string and have other fucntion... (2 Replies)
Discussion started by: sharadwagh
2 Replies

9. Programming

*** glibc detected *** ./a.out malloc() memory corruption

I am facing a problem of memory corruption. The loop runs for the first time but does not go through the second time. What could be the problem? for(int z=0;z<2;z++) { fp=fopen("poly.dat","r"); /*do something which reads this file into a 2D array*/ fclose(fp); ... (10 Replies)
Discussion started by: dare
10 Replies

10. UNIX for Beginners Questions & Answers

3rd party stress testing services

Hi all, bit of a forum newb here, so apologies if this has been covered else where, but I wonder if any of you has any experience with stress testing servers, specifically using 3rd party services. We run a very busy production system, and just haven't been able to simulate the user activity while... (1 Reply)
Discussion started by: dare99
1 Replies
MALLOC_INFO(3)						     Linux Programmer's Manual						    MALLOC_INFO(3)

NAME
malloc_info - export malloc state to a stream SYNOPSIS
#include <malloc.h> int malloc_info(int options, FILE *stream); DESCRIPTION
The malloc_info() function exports an XML string that describes the current state of the memory-allocation implementation in the caller. The string is printed on the file stream stream. The exported string includes information about all arenas (see malloc(3)). As currently implemented, options must be zero. RETURN VALUE
On success, malloc_info() returns 0; on error, it returns -1, with errno set to indicate the cause. ERRORS
EINVAL options was nonzero. VERSIONS
malloc_info() was added to glibc in version 2.10. ATTRIBUTES
For an explanation of the terms used in this section, see attributes(7). +--------------+---------------+---------+ |Interface | Attribute | Value | +--------------+---------------+---------+ |malloc_info() | Thread safety | MT-Safe | +--------------+---------------+---------+ CONFORMING TO
This function is a GNU extension. NOTES
The memory-allocation information is provided as an XML string (rather than a C structure) because the information may change over time (according to changes in the underlying implementation). The output XML string includes a version field. The open_memstream(3) function can be used to send the output of malloc_info() directly into a buffer in memory, rather than to a file. The malloc_info() function is designed to address deficiencies in malloc_stats(3) and mallinfo(3). EXAMPLE
The program below takes up to four command-line arguments, of which the first three are mandatory. The first argument specifies the number of threads that the program should create. All of the threads, including the main thread, allocate the number of blocks of memory speci- fied by the second argument. The third argument controls the size of the blocks to be allocated. The main thread creates blocks of this size, the second thread created by the program allocates blocks of twice this size, the third thread allocates blocks of three times this size, and so on. The program calls malloc_info() twice to display the memory-allocation state. The first call takes place before any threads are created or memory allocated. The second call is performed after all threads have allocated memory. In the following example, the command-line arguments specify the creation of one additional thread, and both the main thread and the addi- tional thread allocate 10000 blocks of memory. After the blocks of memory have been allocated, malloc_info() shows the state of two allo- cation arenas. $ getconf GNU_LIBC_VERSION glibc 2.13 $ ./a.out 1 10000 100 ============ Before allocating blocks ============ <malloc version="1"> <heap nr="0"> <sizes> </sizes> <total type="fast" count="0" size="0"/> <total type="rest" count="0" size="0"/> <system type="current" size="135168"/> <system type="max" size="135168"/> <aspace type="total" size="135168"/> <aspace type="mprotect" size="135168"/> </heap> <total type="fast" count="0" size="0"/> <total type="rest" count="0" size="0"/> <system type="current" size="135168"/> <system type="max" size="135168"/> <aspace type="total" size="135168"/> <aspace type="mprotect" size="135168"/> </malloc> ============ After allocating blocks ============ <malloc version="1"> <heap nr="0"> <sizes> </sizes> <total type="fast" count="0" size="0"/> <total type="rest" count="0" size="0"/> <system type="current" size="1081344"/> <system type="max" size="1081344"/> <aspace type="total" size="1081344"/> <aspace type="mprotect" size="1081344"/> </heap> <heap nr="1"> <sizes> </sizes> <total type="fast" count="0" size="0"/> <total type="rest" count="0" size="0"/> <system type="current" size="1032192"/> <system type="max" size="1032192"/> <aspace type="total" size="1032192"/> <aspace type="mprotect" size="1032192"/> </heap> <total type="fast" count="0" size="0"/> <total type="rest" count="0" size="0"/> <system type="current" size="2113536"/> <system type="max" size="2113536"/> <aspace type="total" size="2113536"/> <aspace type="mprotect" size="2113536"/> </malloc> Program source #include <unistd.h> #include <stdlib.h> #include <pthread.h> #include <malloc.h> #include <errno.h> static size_t blockSize; static int numThreads, numBlocks; #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while(0) static void * thread_func(void *arg) { int j; int tn = (int) arg; /* The multiplier '(2 + tn)' ensures that each thread (including the main thread) allocates a different amount of memory */ for (j = 0; j < numBlocks; j++) if (malloc(blockSize * (2 + tn)) == NULL) errExit("malloc-thread"); sleep(100); /* Sleep until main thread terminates */ return NULL; } int main(int argc, char *argv[]) { int j, tn, sleepTime; pthread_t *thr; if (argc < 4) { fprintf(stderr, "%s num-threads num-blocks block-size [sleep-time] ", argv[0]); exit(EXIT_FAILURE); } numThreads = atoi(argv[1]); numBlocks = atoi(argv[2]); blockSize = atoi(argv[3]); sleepTime = (argc > 4) ? atoi(argv[4]) : 0; thr = calloc(numThreads, sizeof(pthread_t)); if (thr == NULL) errExit("calloc"); printf("============ Before allocating blocks ============ "); malloc_info(0, stdout); /* Create threads that allocate different amounts of memory */ for (tn = 0; tn < numThreads; tn++) { errno = pthread_create(&thr[tn], NULL, thread_func, (void *) tn); if (errno != 0) errExit("pthread_create"); /* If we add a sleep interval after the start-up of each thread, the threads likely won't contend for malloc mutexes, and therefore additional arenas won't be allocated (see malloc(3)). */ if (sleepTime > 0) sleep(sleepTime); } /* The main thread also allocates some memory */ for (j = 0; j < numBlocks; j++) if (malloc(blockSize) == NULL) errExit("malloc"); sleep(2); /* Give all threads a chance to complete allocations */ printf(" ============ After allocating blocks ============ "); malloc_info(0, stdout); exit(EXIT_SUCCESS); } SEE ALSO
mallinfo(3), malloc(3), malloc_stats(3), mallopt(3), open_memstream(3) COLOPHON
This page is part of release 4.15 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/. GNU
2017-09-15 MALLOC_INFO(3)
All times are GMT -4. The time now is 11:09 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy