shmat() Failure While Using a Large Amount of Shared Memory
Hi,
I'm developing a data processing pipeline with multiple stages, with data being moved between the stages using shared memory segments. The size of the data is typically of the order of hundreds of megabytes, and there are typically a few tens of main shared memory segments each of size around 10MB, and a few other shared memory segments of total size less than 1MB.
The problem I'm facing is that after around 600MB has been created in various shared memory segments, further shmat() fails, throwing the error 'Cannot allocate memory'. I tried various combinations of shared memory sizes, and the results are tabulated below.
The system limits regarding shared memory as defined in the directory /proc/sys/kernel are as follows:
Code:
shmall = 2097152
shmmax = 33554432
shmmni = 4096
The contents of /proc/swaps is as follows:
Code:
Filename Type Size Used Priority
/dev/sda7 partition 3903752 34792 -1
This program used to work on a different PC which I was using earlier, but not on the current one. I'm running Kubuntu 7.10 on an Intel Core 2 Duo machine with 4GB of RAM.
Can anyone help me figure out where the problem is? Appreciate any help!
Thanks,
Jayanth
Last edited by theicarusagenda; 02-18-2008 at 07:03 AM..
Hi!
I'm not a UNIX fanatic but I like using it for the
Oracle database since it's not stable in the Windows NT
environment (what is?).
Problem: Is there any command to show me the amount
of installed physical-memory in the machine? Is
there some other way to show the processes which uses... (4 Replies)
Hi all,
is there any command that i can execute to find out the size of the harddisk and RAM on my server? Because i am not the SA, i do not have access to such infomation. (2 Replies)
Hi,
I'm trying to figure out the best solution to the following problem, and I'm not
yet that much experienced like you. :-)
Basically I have to read a fairly large file, composed of "messages" , in order
to display all of them through an user interface (made with QT).
The messages that... (3 Replies)
We just set up a system to use large pages. I want to know if there is a command to see how much of the memory is being used for large pages. For example if we have a system with 8GB of RAm assigned and it has been set to use 4GB for large pages is there a command to show that 4GB of the *GB is... (1 Reply)
Hello
I have the following files
VOICE_hhhh
SUBSCR_llll
DEL_kkkk
Consider that there are 1000 VOICE files+1000 SUBSCR files+1000DEL files
When i try to tar these files using
tar -cvf backup.tar VOICE* SUBSCR* DEL*
i get the error:
ksh: /usr/bin/tar: arg list too long
How can i... (9 Replies)
Hi,
My program was running for a whole night. after 12 hours i got an error message "Cannot allocate memory" during the shmat commmand. So can you please let me know what could be the reason? is there any solution?
thanks in advance.
Regards,
Mano (5 Replies)
Hello.
I am new to this forum and I would like to ask for advice about low level POSIX programming.
I have to implement a POSIX compliant C shared library.
A file will have some variables and the shared library will have some functions which need those variables.
There is one special... (5 Replies)
This basic code works.
I have a very long list, almost 10000 lines that I am building into the array. Each line has either 2 or 3 fields as shown in the code snippit. The array elements are static (for a few reasons that out of scope of this question) the list has to be "built in".
It... (5 Replies)
I have nginx web server logs with all requests that were made and I'm filtering them by date and time.
Each line has the following structure:
127.0.0.1 - xyz.com GET 123.ts HTTP/1.1 (200) 0.000 s 3182 CoreMedia/1.0.0.15F79 (iPhone; U; CPU OS 11_4 like Mac OS X; pt_br)
These text files are... (21 Replies)
Discussion started by: brenoasrm
21 Replies
LEARN ABOUT SUNOS
shmdt
shmop(2) System Calls shmop(2)NAME
shmop, shmat, shmdt - shared memory operations
SYNOPSIS
#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);
int shmdt(char *shmaddr);
Standard conforming
int shmdt(const void *shmaddr);
DESCRIPTION
The shmat() function attaches the shared memory segment associated with the shared memory identifier specified by shmid to the data segment
of the calling process.
The permission required for a shared memory control operation is given as {token}, where token is the type of permission needed. The types
of permission are interpreted as follows:
00400 READ by user
00200 WRITE by user
00040 READ by group
00020 WRITE by group
00004 READ by others
00002 WRITE by others
See the Shared Memory Operation Permissions section of intro(2) for more information.
When (shmflg&SHM_SHARE_MMU) is true, virtual memory resources in addition to shared memory itself are shared among processes that use the
same shared memory.
When (shmflg&SHM_PAGEABLE) is true, virtual memory resources are shared and the dynamic shared memory (DISM) framework is created. The
dynamic shared memory can be resized dynamically within the specified size in shmget(2). The DISM shared memory is pageable unless it is
locked.
The shared memory segment is attached to the data segment of the calling process at the address specified based on one of the following
criteria:
o If shmaddr is equal to (void *) 0, the segment is attached to the first available address as selected by the system.
o If shmaddr is equal to (void *) 0 and ( shmflg&SHM_SHARE_MMU) or (shmflg&SHM_PAGEABLE) is true, then the segment is attached to the
first available suitably aligned address. When (shmflg&SHM_SHARE_MMU) or (shmflg&SHM_PAGEABLE) is set, however, the permission given
by shmget() determines whether the segment is attached for reading or reading and writing.
o If shmaddr is not equal to (void *) 0 and (shmflg&SHM_RND) is true, the segment is attached to the address given by (shmaddr -
(shmaddr modulus SHMLBA)).
o If shmaddr is not equal to (void *) 0 and (shmflg&SHM_RND) is false, the segment is attached to the address given by shmaddr.
o The segment is attached for reading if (shmflg&SHM_RDONLY) is true {READ}, otherwise it is attached for reading and writing
{READ/WRITE}.
The shmdt() function detaches from the calling process's data segment the shared memory segment located at the address specified by
shmaddr. If the application is standard-conforming (see standards(5)), the shmaddr argument is of type const void *. Otherwise it is of
type char *.
Shared memory segments must be explicitly removed after the last reference to them has been removed.
RETURN VALUES
Upon successful completion, shmat() returns the data segment start address of the attached shared memory segment; shmdt() returns 0. Other-
wise, -1 is returned, the shared memory segment is not attached, and errno is set to indicate the error.
ERRORS
The shmat() function will fail if:
EACCES Operation permission is denied to the calling process (see intro(2)).
EINVAL The shmid argument is not a valid shared memory identifier.
EINVAL The shmaddr argument is not equal to 0, and the value of (shmaddr - (shmaddr modulus SHMLBA)) is an illegal address.
EINVAL The shmaddr argument is not equal to 0, is an illegal address, and (shmflg&SHM_RND) is false.
EINVAL The shmaddr argument is not equal to 0, is not properly aligned, and (shmfg&SHM_SHARE_MMU) is true.
EINVAL SHM_SHARE_MMU is not supported in certain architectures.
EINVAL Both (shmflg&SHM_SHARE_MMU) and (shmflg&SHM_PAGEABLE) are true.
EINVAL (shmflg&SHM_SHARE_MMU) is true and the shared memory segment specified by shmid() had previously been attached by a call to
shmat() in which (shmflg&SHM_PAGEABLE) was true.
(shmflg&SHM_PAGEABLE) is true and the shared memory segment specified by shmid() had previously been attached by a call to
shmat() in which (shmflg&SHM_SHARE_MMU) was true.
EMFILE The number of shared memory segments attached to the calling process would exceed the system-imposed limit.
ENOMEM The available data space is not large enough to accommodate the shared memory segment.
The shmdt() function will fail if:
EINVAL The shmaddr argument is not the data segment start address of a shared memory segment.
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|Interface Stability |Standard |
+-----------------------------+-----------------------------+
|MT-Level |Async-Signal-Safe |
+-----------------------------+-----------------------------+
SEE ALSO intro(2), exec(2), exit(2), fork(2), shmctl(2), shmget(2), standards(5)SunOS 5.10 1 Sep 2003 shmop(2)