Visit Our UNIX and Linux User Community

Memory leak with awk on MacOs

Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Memory leak with awk on MacOs
# 1  
Old 10-28-2016
Memory leak with awk on MacOs

Dear all,

I use awk quite a bit for data wrangling ... today I find weird behavior that I cannot wrap my head around.

if I execute the following command (simplified to illustrate the behavior ... nothing to do with the real command)
bash-3.2$ awk 'BEGIN{for(i=1;i<=100000000;i++){for(j=1;j<=10;j++){s="a";}}}'

things are fine. I have relative constant memory usage (a couple of K). If I modify it slightly to
bash-3.2$ awk 'BEGIN{for(i=1;i<=100000000;i++){for(j=1;j<=10;j++){s="a"j;}}}'

I can watch this command starting to take gigabytes of memory (I am looking at it using "top").

It seems concatening a string and the number j causes problems, although in principle I store only one variable at any point in time. I am pretty sure that this never happened before. This is happening on MacOS.

If anyone has seen this, please do let me know what to do!

Last edited by jim mcnamara; 10-28-2016 at 10:49 PM..
This User Gave Thanks to comm|getline For This Post:
# 2  
Old 10-28-2016
Interesting. I could reproduce this, it is quite strange. It seems like a bug in BSD awk. I noticed gawk and mawk do not display this behavior, but BSD awk does...

An alternative way of doing it does not display the behavior:
awk 'BEGIN{for(i=1;i<=100000000;i++) for(j=1;j<=10;j++) s=sprintf("a%d",j) }'

awk 'BEGIN{for(i=1;i<=100000000;i++) for(j=1;j<=10;j++) s=sprintf("a%s",j) }'


Exploring this further, the problem seems to be in the number-to-string conversion:

awk 'BEGIN{for(i=1;i<=100000000;i++) for(j=1;j<=10;j++) s=2 "a" }'

No Problem
awk 'BEGIN{for(i=1;i<=100000000;i++) for(j=1;j<=10;j++) s="2" "a" }'

$ awk --version
awk version 20070501
$ uname -rs
Darwin 16.0.0

MacOS Sierra 10.12

Last edited by Scrutinizer; 10-29-2016 at 06:10 AM..
These 4 Users Gave Thanks to Scrutinizer For This Post:
# 3  
Old 10-29-2016
Dear Scrutinizer,

thanks for the workaround(s). The sprintf trick works also for me without memory problem. Will have to check how this plays out in more complicated scripts.

In case you ever stumble upon an explanation, please do let me know. I would be more than interested in understanding this,

Thanks again!

P.S. just for comparability
bash-3.2$ awk --version
awk version 20070501
bash-3.2$ uname -rs
Darwin 15.4.0

Last edited by Scrutinizer; 10-29-2016 at 04:25 AM..
# 4  
Old 10-29-2016
I downloaded and compiled the latest version of "One True Awk" (using the Apple XCode command line tools) and with the resulting binary the problem did not occur, so apparently this was fixed somewhere along the line...
$ awk-latest --version
awk version 20121220

I filed a bug report with Apple..

GitHub - danfuzz/one-true-awk: Archive and history of One True Awk

FWIW, here are the steps I followed:
I had to make one adjustment in the makefile (comment out one of the YACC lines) to make it work:
YACC = bison -d -y
#YACC = yacc -d -S

then run:
sudo cp a.out /usr/local/bin/awk-latest
sudo cp awk.1 /usr/local/share/man/man1/awk-latest.1

BTW: this version also fixes the -vsomevar=someval issue (there needs to be a space after -v) that plagues the 20070501 version.

Last edited by Scrutinizer; 10-29-2016 at 11:50 AM..
This User Gave Thanks to Scrutinizer For This Post:

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Web Development

Finding Cause of Memory Leak

Hi We have just got a dedicated server with Fasthosts, O/S is Linux CentOS 6 64 bit. It was a fresh install and I have just moved one WordPress site onto there. The problem is we seem to be getting a memory leak (that's what Fasthosts said) and the database (I think) keeps crashing, so we... (3 Replies)
Discussion started by: Pokeyzx
3 Replies

2. Programming

Help regarding memory leak in this C program

I have written this code in C which reads a very large collection of text files and does some processing. The problem with this code is that there are memory leaks which I am not able to figure out as to where the problem is. When I run this code, and see the memory usage using top command, then I... (7 Replies)
Discussion started by: shoaibjameel123
7 Replies

3. Red Hat

Memory leak

Hi all I am using RED HAT 5.4, and i am getting memory uses problem. when i use "sync;echo 3 > /proc/sys/vm/drop_cache" command the memory will release after 2,3 hour memory show 95%. pls suggest right way. thanks (37 Replies)
Discussion started by: reply.ravi
37 Replies

4. Programming

Memory Leak

Hi, I am trying a database server which keeps a B+ plus tree structure and works on it. I am trying to find the memory used/leak while executing this process. I check the memory leak by using ps uax command. When i execute a delete query i am sure that my code frees up the existing... (9 Replies)
Discussion started by: kumaran_5555
9 Replies

5. IP Networking

memory leak?

Hi All, my client server application can work in two modes: 1) one direction - only client sends msgs to server 2) two directions - server gives 'answers' to client. when program run in the first mode it looks OK, but when server answers to client than client's application exit its... (2 Replies)
Discussion started by: lenna
2 Replies

6. UNIX for Advanced & Expert Users

Need to create a memory leak

Hi. This might be a strange request, but does anyone have any idea on a simple shell script that would use more and more memory as it ran? Like a purposeful leak. I want to test the behaviour of an already running program when the machine runs out of memory. Thanks! (4 Replies)
Discussion started by: rebelbuttmunch
4 Replies

7. UNIX for Advanced & Expert Users

Memory leak while using pthread_cancel()

I tried to execute a sample pthread program to cancel a newly created one using pthread_cancel(). but using valgrind on my code shows some memory leak. My Code: #include "iostream" #include "unistd.h" #include "pthread.h" #include "signal.h" using namespace std; void handler(int); void*... (4 Replies)
Discussion started by: kcr
4 Replies

8. Programming

Memory leak of fork()

Today, I wrote a test code for fork/execvp/waitpid. In the parent process, it fork 100 child processes which only execute "date" to print the current datetime. When any child process die, the parent process will receive a SIGCHLD signal. Then, the parent process will re-fork-execvp the child... (7 Replies)
Discussion started by: whererush
7 Replies

9. Programming

about virtual memory and memory leak

Hi, First of all I appreciate this group very much for its informative discussions and posts. Here is my question. I have one process whose virtual memory size increases linearly from 6MB to 12MB in 20 minutes. Does that mean my process has memory leaks? In what cases does the... (4 Replies)
Discussion started by: shriashishpatil
4 Replies

Featured Tech Videos