GeoscienceAustralia / ginan

The Australian Government, through Positioning Australia (part of Geoscience Australia), is funding the design, development and operational service of a Global Navigation Satellite System (GNSS) position correction system - the Ginan service and toolkit. The application of the Ginan correction service by a GNSS device has the potential to increase positioning accuracy from meters to centimetres across Australia. The suite of software systems in this repository (the Ginan toolkit) will be used to create the service. It is available now under an open source licence. Ginan will give individuals and organisations no-cost access to the Ginan software and service as a public good.
https://geoscienceaustralia.github.io/ginan/
Other
207 stars 95 forks source link

A memory leak occurs during real-time precise point positioning #82

Open 2533672343 opened 3 months ago

2533672343 commented 3 months ago

Describe the bug Running multi-station real-time precision point positioning has the problem of memory leak.

To Reproduce Steps to reproduce the behavior:

  1. ./../bin --config ex15_pea_rt_user_gnss_ar.yaml
  2. Enter the 'top' command on the terminal, and you can see that the VIRT value continues to increase.

Expected behavior The amount of memory used during program execution does not always increase over time.

Configuration files ex15_pea_rt_user_gnss_ar.yaml, and the ambiguity_resolution is off, delete_old_ephemerides is true.

Desktop (please complete the following information):

seballgeyer commented 2 months ago

Hello

It seems you are experiencing a memory leak issue with Ginan version 1.5.4. Memory leaks can be problematic as they cause the application to consume more and more memory over time, which can eventually lead to performance issues or system crashes.

The first step in addressing this issue is to ensure that you are using the latest version of the software. As you mentioned, you are using Ginan 1.5.4 which is outdated, and updating to the latest version, which is version 3.0.0, could resolve the memory leak problem. The new version includes many improvements such as performance enhancements and bug fixes, which might include a fix for the memory leak issue.

Here’s a general outline of steps you could take to resolve the issue:

  1. Obtain the latest version of Ginan from the official repository.

  2. Configuration Check: Update your configuration files.

If the problem persists, feel free to contact us.

2533672343 commented 2 months ago

Hello

Thanks for your response, and the memory leak problem seems to exist in version 3.0.0 as well.

seballgeyer commented 2 months ago

Hello,

Could you provide the configuration file you are using?

Thank you.

2533672343 commented 2 months ago

Hello, Thank you for your reply. Memory is still slowly increasing after a day of operation. Is it normal ? The configuration file(rt_ppp_example.yaml) is as follows: inputs:

inputs_root: ./products/

atx_files:  [ igs20.atx                             ]
egm_files:  [ tables/EGM2008.gfc                    ]
igrf_files: [ tables/igrf13coeffs.txt               ]
erp_files:  [ finals.data.iau2000.txt        ]
planetary_ephemeris_files: [ tables/DE436.1950.2050 ]

troposphere:
    gpt2grid_files: [ tables/gpt_25.grd ]

tides:
    ocean_tide_loading_blq_files:   [ tables/OLOAD_GO.BLQ                  ]
    atmos_tide_loading_blq_files:   [ tables/ALOAD_GO.BLQ                  ]
    ocean_pole_tide_loading_files:  [ tables/opoleloadcoefcmcor.txt ]
    ocean_tide_potential_files:     [ tables/fes2014b_Cnm-Snm.dat   ]

snx_files:  [ IGS0OPSSNX_20233020000_07D_07D_SOL.SNX ]

gnss_observations:
    gnss_observations_root: "https://<user>:<password>@ntrip.data.gnss.ga.gov.au/"
    rtcm_inputs:
        - ALIC00AUS0
        - MAW100ATA0
        - DARW00AUS0
        - STR200AUS0

satellite_data:
    satellite_data_root: "https://<user>:<password>@ntrip.data.gnss.ga.gov.au/"
    rtcm_inputs:
        ssr_antenna_offset: APC
        rtcm_inputs:
        - BCEP00BKG0
        - SSRA00BKG0

outputs: metadata: config_description: rt_ppp_example

outputs_root:              ./outputs/<CONFIG>

trace:
    level:                 2
    output_receivers:      false
    output_network:        false
    receiver_filename:     <CONFIG>_<RECEIVER>_<YYYY><DDD><HH>.TRACE
    network_filename:      <CONFIG>_<RECEIVER>_<YYYY><DDD><HH>.TRACE
    output_residuals:      true
    output_residual_chain: true
    output_config:         true

gpx:
    output:                true
    filename:              <CONFIG>_<RECEIVER>_<YYYY><DDD><HH>.GPX

satellite_options:

global:
    models:
        pos:
            enable:             true
            sources:            [ SSR ]
        clock:
            enable:             true
            sources:            [ SSR ]
        code_bias:
            enable:             true
            undefined_sigma:    3
        phase_bias:
            enable:             true
            undefined_sigma:    3

receiver_options:

global:
    elevation_mask:     15       # degrees
    error_model:        ELEVATION_DEPENDENT # {uniform,elevation_dependent}
    code_sigma:         0.3      # Standard deviation of code measurements, m
    phase_sigma:        0.003    # Standard deviation of phase measurmeents, m

ALIC:
    receiver_type:      "SEPT POLARX5"                 # (string)
    antenna_type:       "LEIAR25.R3      NONE"       # (string)
    apriori_position:   [-4052052.8638, 4212835.9618,-2545104.4038] # [floats]
    models:
        eccentricity:
            enable:     true
            offset:     [0.0000,   0.0000,   0.0015] # [floats]

MAW1:
    receiver_type:      "SEPT POLARX5"               # (string)
    antenna_type:       "AOAD/M_T        AUST"       # (string)
    apriori_position:   [ 1111287.2209, 2168911.1847,-5874493.6128] # [floats]
    models:
        eccentricity:
            enable:     true
            offset:     [0.0000,   0.0000,   0.0035] # [floats]

DARW:
    receiver_type:      "SEPT POLARX5"                 # (string)
    antenna_type:       "JAVRINGANT_DM   NONE"       # (string)
    apriori_position:   [-4091359.7273, 4684606.3705,-1408578.9291] # [floats]
    models:
        eccentricity:
            enable:     true
            offset:     [0.0000,   0.0000,   0.0000] # [floats]

STR2:
    receiver_type:      "TRIMBLE ALLOY"              # (string)
    antenna_type:       "LEIAR25.R3      NONE"       # (string)
    apriori_position:   [-4467075.3642, 2683011.8533,-3667006.8945] # [floats]
    models:
        eccentricity:
            enable:     true
            offset:     [0.0000,   0.0000,   0.0000] # [floats]

processing_options:

process_modes:
    ppp:                            true

epoch_control:
    epoch_interval:                 1
    wait_all_receivers:             1

gnss_general:
    rec_reference_system:           GPS

    sys_options:
        gps:
            process:                true
            reject_eclipse:         false
            # clock_codes:            [ L1W, L2W ]
            code_priorities:        [ L1W, L1C, L2W ]
            ambiguity_resolution:   false

estimation_parameters:

receivers:
    global:
        pos:
            estimated:          [true]
            sigma:              [1]
            process_noise:      [0.0]
        clock:
            estimated:          [true]
            sigma:              [1000]
            process_noise:      [100]
        clock_rate:
            estimated:          [false]
            sigma:              [0.005]
            process_noise:      [1e-4]
        ambiguities:
            estimated:          [true]
            sigma:              [1000]
            process_noise:      [0]
        ion_stec:                        # Ionospheric slant delay
            estimated:          [true]   # Estimate state in kalman filter
            sigma:              [200]    # Apriori sigma values - if zero, will be initialised using least squares
            process_noise:      [10]     # Process noise sigmas
        trop:
            estimated:          [true]
            sigma:              [0.3]
            process_noise:      [0.0001]
        trop_grads:
            estimated:          [true]
            sigma:              [0.03]
            process_noise:      [1.0E-6]
        code_bias:
            estimated:          [true] # false
            sigma:              [20]
            process_noise:      [0]
        phase_bias:
            estimated:          [false]
            sigma:              [10]
            process_noise:      [0]

mongo: # Mongo is a database used to store results and intermediate values for later analysis and inter-process communication

enable:              none                     # Enable and connect to mongo database {none,primary,secondary,both}
primary_uri:         mongodb://localhost:27017   # Location and port of the mongo database to connect to
primary_database:    <CONFIG>
output_components:   primary                     # Output components of measurements {none,primary,secondary,both}
output_states:       primary                     # Output states {none,primary,secondary,both}
output_measurements: primary                     # Output measurements and their residuals {none,primary,secondary,both}
output_test_stats:   primary                     # Output test statistics {none,primary,secondary,both}
delete_history:      primary                     # Drop the collection in the database at the beginning of the run to only show fresh data {none,primary,secondary,both}

debug:

instrument: true