我们有许多永远运行的 ksh 脚本(在 while 循环内),或者至少直到将关闭事件传递给它们为止。我们有一个项目,其中这些脚本转换为 ksh93(并添加了功能),并且操作系统从 AIX 5.3 升级到 6.1。 ksh 脚本在 AIX 5.1 上运行没有问题。现在我们已经转换为 ksh93、AIX 6.1 并添加了功能,我们发现进程的内存继续增长,直到超过其限制。我们必须添加逻辑来在进程达到内存阈值时终止并重新启动进程。
我们假设(也许是错误的)某些 ksh93 函数中存在内存泄漏。
我试图确定是否有一个特定的函数没有释放内存。为了获得进程内存,我一直在使用svmon -P $$ | grep $$ | awk '{ print $3 }'
.也许有更好的方法来做到这一点。
以下是脚本中各个点的 svmon 命令的输出。我添加了一个“循环结束”来显示外部“while”循环的底部。您会注意到内存使用量不断攀升,除了偶尔读取的值回落到接近起始值之外。我猜测这些低值是错误的,因为低值之后的下一个读数似乎遵循低值之前的读数。如果删除较低的值,内存使用量将继续攀升。该脚本是一个看门狗脚本,用于检查其他进程是否存在。我们其他进程的脚本也表现出相同类型的行为。
有没有更好的方法来确定内存使用情况?有人知道常见的 ksh93 函数不能正确释放内存吗? IBM 建议我们升级到 AIX 7.x,但目前不可能。
我现在应该警告你。我是一名 DBA,而不是 ksh 脚本开发人员。
28721
Start-Of-Loop
28435 <--- low value
28733
28737
28740
28745
28747
28435 <--- low value
28755
28759
28762
28767
28770
28774
28777
28780
28783
28787
28791
28806
28809
28813
28817
28822
28825
28828
28831
28833
28835
28835
28838
28839
28843
28843
28843
28435 <--- low value
28843
28843
28846
28846
28847
28408 <--- low value
28853
28853
28853
28408 <--- low value
28854
28854
28857
28857
28859
28860
28863
28863
28864
28865
28867
28869
28871
28874
28878
28878
28879
28879
28882
28882
28883
28884
28887
28888
28891
28891
28435 <--- low value
28894
28897
28898
28901
28436 <--- low value
28904
28904
28906
28906
28910
28910
28914
28407 <--- low value
28917
28435 <--- low value
28921
28923
28927
28927
28930
28436 <--- low value
28935
28935
28935
28938
28942
28942
28435 <--- low value
28946
28948
28950
28953
28953
28953
28953
28953
28953
28957
28957
28958
28958
28959
28959
28961
28962
28965
28408 <--- low value
28966
28966
28967
28968
28970
28971
28974
28974
28975
28975
28976
28976
28408 <--- low value
28978
28978
End-Of-Loop
28436 <--- low value
28982
28982
28983
28408 <--- low value
28984
28984
28985
28440 <--- low value
28989
28990
28436 <--- low value
28991
28991
28991
28991
28991
28994
28995
28995
28995
28995
28997
29001
29004
29008
28435 <--- low value
29008
29008
28408 <--- low value
29011
29011
29011
29015
29015
29019
29019
29019
29019
29020
28435 <--- low value
29025
29026
29028
29030
29033
29033
28435 <--- low value
29035
29039
28436 <--- low value
29039
29039
29041
29043
28408 <--- low value
29047
29050
29050
29052
29052
29055
29055
29057
29057
29058
28408 <--- low value
29061
29062
29067
29067
29068
28408 <--- low value
29069
29070
29075
28408 <--- low value
29076
29076
29076
28408 <--- low value
28408 <--- low value
28435 <--- low value
29080
29083
28408 <--- low value
29087
29089
29089
29092
29094
28430 <--- low value
29097
29100
29101
29103
28408 <--- low value
29103
29103
29104
29104
28435 <--- low value
29107
28408 <--- low value
29111
29113
29114
29117
29117
29120
29120
29122
29122
29124
29124
29127
29127
29129
29129
28408 <--- low value
29134
29135
29135
29135
29135
29139
29139
29139
29139
28440 <--- low value
29139
28435 <--- low value
28408 <--- low value
29139
End-Of-Loop
29141
29145
29145
29147
28435 <--- low value
29150
29150
29153
29153
29155
29157
29157
29157
29157
29157
29159
29159
29159
29159
29163
29163
29167
29169
29172
29172
29175
29175
29177
29177
29177
29179
28435 <--- low value
29181
29186
29186
29189
29189
29191
29193
29196
29196
29198
29198
29199
29200
29202
29202
29205
29205
28435 <--- low value
29209
29211
28435 <--- low value
29216
29217
29220
28435 <--- low value
29225
29225
28433 <--- low value
29227
28433 <--- low value
29229
29230
29231
29233
29233
29235
29237
29238
29239
29244
29247
29250
29252
29258
29260
29263
29264
29268
29269
29271
29271
29274
29274
28435 <--- low value
28408 <--- low value
29283
29286
29287
29291
29291
29295
29295
29295
29299
29303
29303
29306
29306
29308
29310
29312
28440 <--- low value
29312
29312
29317
29318
29322
29322
29323
29323
28408 <--- low value
28407 <--- low value
29327
29327
29329
29329
28435 <--- low value
29329
29330
29331
28437 <--- low value
29333
29336
29336
29336
29336
29336
29336
29336
29336
29336
End-Of-Loop
29338
29342
29343
29343
29345
29347
28435 <--- low value
28435 <--- low value
29349
29349
29351
29353
29353
29354
29354
29354
29354
29354
28436 <--- low value
28408 <--- low value
29356
29357
29357
29361
29361
28435 <--- low value
29361
29363
29363
29366
29367
29373
28408 <--- low value
29376
29376
29380
28407 <--- low value
28435 <--- low value
29381
28440 <--- low value
29387
29387
29390
29394
29394
28436 <--- low value
29396
29398
29399
29401
29401
29402
29402
29403
29404
29406
28436 <--- low value
29411
28408 <--- low value
29417
29417
29418
29419
29421
29421
29423
29424
29426
29426
28408 <--- low value
29431
29435
29435
28435 <--- low value
29439
29442
29444
28435 <--- low value
29447
29449
29449
29451
29451
29455
29455
28435 <--- low value
29458
29461
29462
29465
29467
28408 <--- low value
29470
29473
29475
29478
29479
29483
29483
29485
29485
29488
29488
29489
29489
29489
29489
29491
29492
29493
29493
29495
29497
29501
29503
29504
29504
29506
29508
29509
29511
29515
29515
29519
29519
28436 <--- low value
29521
28408 <--- low value
29522
29523
28435 <--- low value
29523
29523
29523
End-Of-Loop